gpt4 book ai didi

java - Joda DateTime 中 01.04.1893 的奇数结果

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:28 25 4
gpt4 key购买 nike

我的时区是 CET(柏林)。
在测试 Joda 的 DateTime 时,我注意到了一些奇怪的事情:

new DateTime(1893, 4, 1, 0, 0, 0, 0);
=> java.lang.IllegalArgumentException: Illegal instant due to time zone offset transition:

new DateTime(1893, 3, 31, 0, 0, 0, 0).toDate();
=> Fri Mar 31 00:06:32 CET 1893

时区偏移 6 分 32 秒导致时间不存在?
我必须说这是非常出乎意料的,因为我没有指定任何时区信息,因此没想到会遇到这种问题。
如果 1893 年 3 月的 CET(柏林)不存在 - 为什么 new DateTime(1893, 3, 31, 0, 0, 0, 0) 选择与时间匹配的时区我指定了(即 0 分 0 秒)?

使用 DateTime 获取正确时间的选项有哪些?

-- 编辑--
问题似乎是 toDate()。在发布问题之前我已经将其编辑掉了。
Joda 本身实际上工作正常:

new DateTime(1893, 3, 31, 0, 0, 0, 0);
=> 1893-01-01T00:00:00.000+00:53:28

只是在转换为Date时将部分偏移移到了分秒上。

最佳答案

如果您不指定时区,很遗憾,Joda Time 使用的是系统时区。是的,柏林 really did change那时(还有 6 分 32 秒)。所以你指定了一个不存在的本地时间。

“为什么不 [...] 选择与我指定的时间匹配的时区?”是什么意思? - 时区会影响本地时间映射到 UTC 的方式。在您隐式指定的时区(通过让它选择您的系统默认值),该时间不存在;没有 UTC 即时映射到那个本地时间。有任意数量的时区可以映射本地时间 - Joda 如何知道选择哪个时区?

我同意使用系统默认时区对 Joda 来说是一个糟糕的举动(我们在 Noda Time 中修复了这一点)但所有其他行为绝对没问题。 (Noda Time 对这种情况有一个特定的异常(exception),以将其与传递更明显不好的值区分开来,但我们走了。)

如果您根本不希望加入时区,那么您应该改用LocalDateTime

关于java - Joda DateTime 中 01.04.1893 的奇数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2420527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com