java zoneddatetime toEpochSecond而不转换为本地时间

问题描述 投票:0回答:2

我有一个美国东部时间的数据集,没有任何夏令时。 每个日期时间都是从字符串中读取的,并使用创建 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 时间戳,以便时间戳与原始字符串中的日期时间匹配?

java zoneddatetime
2个回答
0
投票

将 ZonedDateTime 转换为 Unix 纪元时间戳

首先转换为 java.time.Instant,然后将区域偏移设置为 UTC,然后再将其转换为纪元秒,请参见下文:

zonedDateTime.toInstant().atZone(ZoneOffset.UTC).toEpochSecond();

注意:变量 zonedDateTime 的类型为 java.time.ZonedDateTime,可以是任何时区,然后将其转换为“Unix 纪元时间戳”(以秒为单位)。


0
投票

更快的替代方法是避免在此转换期间创建新的

Instant
对象:

ZonedDateTime t = ZonedDateTime.now();
long epochSeconds = t.getLong(ChronoField.INSTANT_SECONDS);
© www.soinside.com 2019 - 2024. All rights reserved.