我有一个美国东部时间的数据集,没有任何夏令时。 每个日期时间都是从字符串中读取的,并使用创建 zonedDatetime
ZonedDateTime java.time.ZonedDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)
带有 ZoneId.of("America/New_York");
我需要将它们转换为纪元秒,但内置的 toEpochSecond 方法会转换为我的当地时间,即夏令时的 BST。因此,根据一年中的不同时间,时间戳会相差四到五个小时。有没有办法获取不考虑任何本地时间的 unix 时间戳,以便时间戳与原始字符串中的日期时间匹配?
将 ZonedDateTime 转换为 Unix 纪元时间戳
首先转换为 java.time.Instant,然后将区域偏移设置为 UTC,然后再将其转换为纪元秒,请参见下文:
zonedDateTime.toInstant().atZone(ZoneOffset.UTC).toEpochSecond();
注意:变量 zonedDateTime 的类型为 java.time.ZonedDateTime,可以是任何时区,然后将其转换为“Unix 纪元时间戳”(以秒为单位)。
更快的替代方法是避免在此转换期间创建新的
Instant
对象:
ZonedDateTime t = ZonedDateTime.now();
long epochSeconds = t.getLong(ChronoField.INSTANT_SECONDS);