奇达日期时间为01.04.1893

我的时区是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使用系统时区。 是的,柏林当时确实发生了变化 (并且还有6分32秒)。 所以你指定了一个不存在的本地时间。

你是什​​么意思“为什么不选择与我指定的时间相匹配的时区?” – 时区影响本地时间映射到UTC的方式。 在您隐式指定的时区(通过让它选择您的系统默认值),该时间不存在; 没有UTC即时映射到当地时间。 有许多时区可以映射当地时间–Joda如何知道选择哪一个?

我同意使用系统默认时区是Joda的一个不好的举动(我们在Noda Time中修复了一个),但所有其余的行为都绝对没问题。 (Noda Time对于这种情况有一个特殊的例外,以区别于传递更明显不好的值,但我们去了。)

如果您根本不想让时区进入那么您应该使用LocalDateTime

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