将java.util.Date转换为org.joda.time.LocalDateTime时出现问题

3
import org.joda.time.LocalDateTime;
import java.util.Date;

这个日期或者后面的日期都没问题:

  • new LocalDateTime(new Date(0,0,1,2,30)) — 1900-01-01T02:30:00.000
  • new LocalDateTime(new Date(111,4,24,19,51)) — 2011-05-24T19:51:00.000

但是在处理前面的日期时会出现一些不可理解的问题:

  • new LocalDateTime(new Date(0,0,1,2,29,50)) — 1900-01-01T01:59:50.000
  • new LocalDateTime(new Date(0,0,1)) — 1899-12-31T23:30:00.000
  • new LocalDateTime(new Date(-50,0,1)) — 1849-12-31T23:30:20.000
  • new LocalDateTime(new Date(-116,6,4)) — 1784-07-03T23:30:20.000

有谁知道这是什么问题,并且如何避免它?


2
就算参考价值不高,那些 Date() 构造器 已被弃用。你试过使用通过 Calendar 创建的 Date 来尝试这些例子吗? - Rob Hruska
这个构造函数仅用于简化。其他 Date 也是一样的东西。 - Timofey Gorshkov
1个回答

3
你使用的是哪个时区?看起来你正在处理一个时钟不连续性,可能发生在1900年1月1日凌晨2点左右。这意味着当地时钟跳过了一定时间,官方上说这段时间“不存在”。也可能是夏令时的更改。然而,你最后3行数据的持续差异看起来很奇怪——也许Java的Calendar和Joda Time使用不同版本的时区数据库,其中一个缺少了这种变化。
你可以在链接的网站上检查时区的更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接