Spark中如何将指定日期转换为前一天0点的Epoch时间戳
在Spark中将MM-dd-yyyy格式日期转换为前一天0点的Epoch时间戳
你已经完成了日期解析工作,接下来只需三步就能得到目标Epoch时间戳:获取前一天日期、转换为UTC时区的午夜时刻、生成秒级时间戳。
完整代码示例
import java.time.{LocalDate, ZoneOffset} import java.time.format.DateTimeFormatter // 你的现有日期解析代码 val dateInformat = DateTimeFormatter.ofPattern("MM-dd-yyyy") val batchpartitiondate = LocalDate.parse("10-14-2022", dateInformat) // 1. 计算输入日期的前一天 val previousDay = batchpartitiondate.minusDays(1) // 2. 将前一天日期转换为UTC时区的00:00:00时刻 val previousDayMidnightUTC = previousDay.atStartOfDay(ZoneOffset.UTC).toInstant // 3. 转换为秒级Epoch时间戳 val epochTimestamp = previousDayMidnightUTC.getEpochSecond() // 输出结果:1665619200
关键说明
- 时区指定:必须使用
ZoneOffset.UTC,因为Epoch时间戳的基准是UTC时间,若使用本地时区会因时差导致结果偏差。 - 时间戳精度:
getEpochSecond()返回秒级时间戳,如果需要毫秒级,可替换为previousDayMidnightUTC.toEpochMilli()。
示例验证
- 输入日期
10-14-2022→ 解析为2022-10-14→ 前一天2022-10-13→ UTC 00:00:00对应的Epoch时间戳为1665619200,符合需求。 - 输入日期
10-15-2022→ 解析为2022-10-15→ 前一天2022-10-14→ UTC 00:00:00对应的Epoch时间戳为1665705600,与你给出的示例结果匹配(推测你示例中的输入日期12-15-2022为笔误)。
内容的提问来源于stack exchange,提问作者Db8
相关产品推荐
相关产品推荐

