2013-07-16 36 views
-1

date is 1900-01-01joda time 1900 issue

DateTimeFormatter fmt = ISODateTimeFormat.date(); 
return fmt.withZone(DateTimeZone.forTimeZone(zone)).print(date.getTime()); 

輸出是1899-12-31。爲什麼這個錯誤?如何解決它?

+1

那麼,什麼是'zone'?這可能是GMT減去一些東西,這就是爲什麼你會回到一天。 – Blorgbeard

回答

2

在java的Date和joda的DateTime之間1900-01-01有30分鐘的差異。 (java.sql.Datejava.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); 
+1

日期是java.sql.Date。如果它的時區不同,爲什麼所有其他日期打印是正確的? – lseeo

+0

@ user1693380你使用哪個時區? – ntalbs

+1

jdk date和joda datetime都使用+8時區。 – lseeo