我在将a转换java.util.Date
为an时遇到了麻烦,java.time.LocalDateTime
并且在时区方面有一种很奇怪的效果:
Date date = new Date(-3155677200000L); // 1870-01-01T00:00:00.000+0100
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); // 1869-12-31T23:53:28
时间真的到了。6分32秒,这很烦人,因为它还会更改日期甚至年份。
它有做ZoneId.systemDefault()
,如果我使用ZoneOffset
它的作品。
这是为什么?这是JDK中的错误吗?似乎只发生在1893年之前的日期。
ZoneId.systemDefault()
是欧洲/柏林(欧洲中部时间+01:00)
相似地:
ZonedDateTime zonedDateTime = LocalDateTime.of(1870, 1, 1, 0, 0, 0, 0).atZone(ZoneId.systemDefault());
印刷:
1870-01-01T00:00+00:53:28[Europe/Berlin]
预期结果:
1870-01-01T00:00+01:00:00[Europe/Berlin]
根据IANA规则,转换是正确的。欧洲/柏林规则从以下这一行开始:
Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
您从1869-12-31T23:00:00Z开始,所以当地时间是1869-12-31T23:53:28。
这里没有错误-只是一个错误的期望。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句