我想我在常见问题解答中找到了答案,为什么时区的偏移量与 JDK 不同?:
...在引入现代时区系统之前影响日期时间。时区数据是从时区数据库中获取的。该数据库包含有关“本地平均时间”(LMT)的信息,这是在太阳运动之后在该位置观察到的本地时间。
Joda-Time 在某个位置选择第一个时区偏移之前的所有时间都使用 LMT 信息。...
换句话说,该数据库没有该时间的条目,因此它使用本地标准时间(例如,巴黎为 0:09:21,或马德里1为 -0:14:44 )。
System.out.println(new DateTime(-2209161600000L, DateTimeZone.forID("Europe/Paris")));
System.out.println(new DateTime(-2209161600000L, DateTimeZone.forID("Europe/Madrid")));
将打印
1899-12-30T00:09:21.000+00:09:21
1899-12-29T23:45:16.000-00:14:44
解决方案:取决于需要什么时间,如果 UTC 足够,请使用
new DateTime(-2209161600000L, DateTimeZone.forID("UTC")) // 1899-12-30T00:00:00.000Z
或者只是标准java.time
类
Instant.ofEpochSecond(-2209161600L)
Instant.ofEpochMilli(-2209161600000L)
1 - http://home.kpn.nl/vanadovv/time/TZworld.html#eur