Java 1893年4月1日Joda DateTime中的奇数结果

Java 1893年4月1日Joda DateTime中的奇数结果,java,jodatime,Java,Jodatime,我的时区是CET(柏林)。 在测试乔达的约会时间时,我注意到一些奇怪的事情: 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 C

我的时区是CET(柏林)。
在测试乔达的约会时间时,我注意到一些奇怪的事情:

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(柏林)不存在-为什么不
新日期时间(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

只是转换为日期会将部分偏移量移动到分和秒中。

如果不指定时区,不幸的是,Joda time使用的是系统时区。是的,当时的柏林(6分32秒)。所以您指定了一个不存在的本地时间

您所说的“为什么不[…]选择与我指定的时间相匹配的时区?”-时区会影响本地时间映射到UTC的方式。在您隐式指定的时区中(通过让它选择您的系统默认值),该时间不存在;没有UTC即时映射到该本地时间。有很多时区可以绘制当地时间-乔达怎么知道选择哪个时区

我同意使用系统默认时区对Joda来说是一个糟糕的举动(我们也在其中进行了修正),但所有其他行为都是绝对正确的。(野田佳彦在这种情况下有一个特殊的例外,以区分它传递的值更明显是不好的,但我们开始了。)


如果您根本不希望时区进入它,那么您应该使用
LocalDateTime

您是否尝试使用
新的DateTime(1893,4,1,0,0,0,0,DateTimeZone.UTC)实例化该项

IOW:这不是一个bug,它是一个特性。字面意思。谢谢你的链接。我知道CET在那个日期之前是不存在的。我发现joda确实正确地创建了日期。我的问题似乎是转换为java.util.Date时无法很好地处理移位(请参见我的编辑)。但是,与日期时间相比,日期的问题可能更大。