2012-01-30 19 views
0

DateTime(またはLocalDate)を作成するときに問題が発生しています。私は古いコードを内部的にjodaを使ってより正気にするために変換しています。JodaTimeをJava.util.DateからDateTime(またはLocalDate)に変換する

assertEquals(2082, new Date(2082, 1, 1).getYear()); 

これら両方の失敗:

assertEquals(2083, new LocalDate(new Date(2083, 1, 1)).getYear()); 
assertEquals(2084, new DateTime(new Date(2084, 1, 1)).toLocalDateTime().getYear()); 

ここで何が起こっているの?しかし、私は

これは合格... 1900の問題に実行していますよDateオブジェクトからDateTimeを取得するにはどうすればよいですか?

+0

結果はどのようなものですか? – Alexandre

+0

私は3983(2083 + 1900)と3984(2084 + 1900)を取得しています –

答えて

5

推奨されていません。 JDKバージョン1.1以降は、Calendar.set(year + 1900、month、date)またはGregorianCalendar(year + 1900、month、date)に置き換えられました。

年、月、および日の引数で指定された曜日の開始時刻に、 現地時間の深夜を表すように、Dateオブジェクトを割り当てて初期化します。

パラメータ:年の年 - 1900。月の月の範囲は0〜11です。 日付1から31の間の月の日。

years引数が1900年からのオフセットであることに加えて、このコンストラクタは廃止予定であるため使用しないでください。代わりに、java.util.Calendarを使用します。

Calendar cal = Calendar.getInstance(); 
cal.set(2083, 1, 1); 
assertEquals(2083, new LocalDate(cal).getYear()); 
3

コードは問題ありません。

コンストラクタがDateで、そのgetYear()メソッドが1900年で動作するため、混乱する結果になります。そのため、廃止されています。

DateからLocalDate/LocalDateTimeへの変換にはタイムゾーンが必要であり、明示的に指定されていない場合はデフォルトのタイムゾーンが必要です。 java.util.Date(int year, int month, int date)のjavadocから

+0

DateTimeはこれを世話してはいけませんか?または、-1900を組み込んだ日付オブジェクトを構築する必要がありますか? 'New Date(2082-1​​900,1,1)' –

+0

@ DavidM.Coe:どのように気にすることができますか? Dateは正確なインスタンスを表し、JodaTimeはそれを変更できません。そして、はい、あなたは 'Date' APIを使って作業するときに、その癖に気を付ける必要があります。 – axtavt

+0

DateTime(Date date)の実装でDateTimeオブジェクトを作成し、その年から-1900を引いた場合を想像することができます。私はそれが好きだったでしょう:( –

1

アイデアのカップル:

Date date= new Date(2083, 1, 1); 

    DateTime dt = new DateTime(2083, 1, 1, 0, 0, 0, 0); 

    assertEquals(2083, new LocalDate(dt).getYear()); 

    assertEquals(3983, new LocalDate(date).getYear()); 

[OK]をクリックします。簡単な紹介:LocalDateは、タイムゾーンのない日付を表す不変のdatetimeクラスです。 (API比較、http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html) LocalDateの計算は、年表を使用して実行されます。この年表は、すべての計算のためにUTCタイムゾーンになるように内部的に設定されます。 DateTimeオブジェクトを見ると、事実を除いて基本的に同じですが、タイムゾーンに関するフィールドが計算されます。計算は、現代のグレゴリオ暦と互換性のあるデフォルトの年表(ISOChronology)を使用して行われます。

問題:java.util.Dateコンストラクターで年、月、日を整数y - 1900で使用します。 例では、2083は3983年(!)(http://docs.oracle.com/ javase/7/docs/api/java/util/Date.html)。 それは...あなたは-1900を失っていました...そしてはい、java.util。日付は1900問題です)

-Markus

関連する問題