Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime_Java_Datetime_Timezone_Java 8 - Fatal编程技术网

使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime

使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime,java,datetime,timezone,java-8,Java,Datetime,Timezone,Java 8,我在将java.util.Date转换为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-

我在将
java.util.Date
转换为
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中的一个bug吗?这似乎只发生在1893年之前

ZoneId.systemDefault()
是欧洲/柏林(CET,+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


这里没有bug-只是一个错误的预期。

根据IANA规则,转换是正确的。欧洲/柏林规则从以下几行开始:

Zone    Europe/Berlin   0:53:28 -   LMT 1893 Apr
你从1869-12-31T23:00:00Z开始,所以当地时间是1869-12-31T23:53:28


这里没有bug-只是一个错误的预期。

所以实际上java.util.Date表示法是错误的,因为它应该是1869-12-31T23:53:28.000+0100?@user2907078:我不知道你说的“java.util.Date表示法是错误的”值只是时间的瞬间,即1869-12-31T23:00:00Z,或相当于1870-01-01T00:00:00.000+0100。这是自纪元值-3155677200000L以来的毫秒值。如果你问-3155677200000L是否错误,我们不知道-我们不知道你是从哪里得到的。所以实际上java.util.Date表示法是错误的,因为它应该是1869-12-31T23:53:28.000+0100?@user2907078:我不知道你所说的“java.util.Date表示法是错误的”
Date
值只是时间上的瞬间,即1869-12-31T23:00:00Z,或等效于1870-01-01T00:00:00.000+0100。这是自纪元值-3155677200000L以来的毫秒值。如果你问-3155677200000L是否错误,我们不知道-我们不知道你从哪里得到的。