【发布时间】:2020-09-28 19:10:52
【问题描述】:
我有一个在 EST 时间没有任何夏令时的数据集。 从字符串中读取每个日期时间,并使用
创建一个 zonedDatetimeZonedDateTime 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 时间戳,以便时间戳与原始字符串中的日期时间匹配?
【问题讨论】:
-
是什么让您认为
toEpochSecond转换为 BST?它转换为无时区值。无论您使用什么来检查toEpochSecond的值,都可能会插入您的本地时区。 -
from javadoc>将此日期时间转换为从 1970-01-01T00:00:00Z 开始的秒数。这使用本地日期时间和偏移量来计算纪元秒值,即从 1970-01-01T00:00:00Z 开始经过的秒数。纪元之后时间线上的瞬间是正的,更早的是负的。这是toEpochSecond的实际代码> default long toEpochSecond() { long epochDay = toLocalDate().toEpochDay(); long secs = epochDay * 86400 + toLocalTime().toSecondOfDay();秒 -= getOffset().getTotalSeconds();返回秒; }
-
是的,而且?它使用来自
ZonedDateTime的区域“America/New_York”,这是完全正确的行为。
标签: java zoneddatetime