我的时区是 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 将部分偏移量移动到分钟和秒中。