0

dateです1900-01-01

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

出力は1899-12-31です。なぜこのエラー?それを修正する方法は?

4

1 に答える 1

3

1900-01-01javaDateと jodaでは 30 分の差がありDateTimeます。(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 から各フィールドを抽出し、フィールド値を使用してDatejoda のインスタンスを作成する必要があるようです。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);
于 2013-07-16T04:28:39.433 に答える