date
is 1900-01-01
。joda time 1900 issue
DateTimeFormatter fmt = ISODateTimeFormat.date();
return fmt.withZone(DateTimeZone.forTimeZone(zone)).print(date.getTime());
輸出是1899-12-31
。爲什麼這個錯誤?如何解決它?
date
is 1900-01-01
。joda time 1900 issue
DateTimeFormatter fmt = ISODateTimeFormat.date();
return fmt.withZone(DateTimeZone.forTimeZone(zone)).print(date.getTime());
輸出是1899-12-31
。爲什麼這個錯誤?如何解決它?
在java的Date
和joda的DateTime
之間1900-01-01
有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
每個字段,並使用字段的值,如創建一個喬達的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);
那麼,什麼是'zone'?這可能是GMT減去一些東西,這就是爲什麼你會回到一天。 – Blorgbeard