这是我的第一篇帖子,所以如果我没有遵守所有的规则和惯例,请原谅我。我在这段代码中遇到了一个问题,在Java 8和Java 11中返回的纪元时间毫秒数不同。
String strDate = "2022-07-18 17:52:23 America/New_York";
DateTimeFormatter frmt = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss VV")
.parseDefaulting(ChronoField.HOUR_OF_DAY,0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR,0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE,0)
.parseDefaulting(ChronoField.NANO_OF_SECOND,0)
.parseDefaulting(ChronoField.OFFSET_SECONDS,0)
.toFormatter();
TemporalAccessor temporal = frmt.parse(strDate);
System.out.println(Instant.from(temporal).toEpochMilli());
输出:
- Java 8 - 1658181143000 是纽约的正确值
- Java 11 - 1658166743000 错误。该值是UTC/GMT的值
在Java 8中产生了正确的结果1658181143000,这是New_York
时区的纪元值。但在Java 11中给出了1658166743000,这是UTC时区的纪元表示。通过代码调试,我发现库没有在正确的位置设置偏移量。非常感谢您的帮助。
提前致谢
期望得到纽约的正确纪元值。