1900-01-01 在 java 的 Date 和 joda 的 DateTime 之间有 30 分钟的差异。 (java.sql.Date 是java.util.Date 的子类)
所以,这不是格式化程序问题。调查以下代码并检查输出:
Date javaDate = new SimpleDateFormat("yyyy-MM-dd").parse("1900-01-01");
System.out.printf("%s, %d\n", javaDate, javaDate.getTime());
DateTime jodaDate1 = new DateTime(1900, 1, 1, 0, 0, 0);
System.out.printf("%s, %d\n", jodaDate1, jodaDate1.getMillis());
DateTime jodaDate2 = new DateTime(javaDate.getTime());
System.out.printf("%s, %d\n", jodaDate2, jodaDate2.getMillis());
当您检查输出时,您可以看到相同的毫秒值表示为不同的日期。如果将日期更改为1900-01-02,则日期和它们的毫秒值是相同的。
因此,您似乎应该从 java 的 Date 中提取每个字段,并使用字段值创建一个 joda 的 DateTime 实例,如下所示:
Calendar cal = Calendar.getInstance();
cal.setTime(javaDate);
DateTime dt = new DateTime(cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH)+1,
cal.get(Calendar.DATE), 0, 0, 0);