2013-07-04 2 views
8

私は今日JodaTimeをいじりました、と私は、このテストに合格すると予想:なぜJoda DateTimeをカレンダーに変換して戻ってcenturyOfEraフィールドを変更するだけですか?

@Test 
public void dateTimeShouldRoundTrip() { 
    DateTime originalDateTime = new DateTime(2013, 7, 4, 0, 0); 
    DateTime roundTrip = new DateTime(originalDateTime.toGregorianCalendar()); 
    assertThat(roundTrip, is(originalDateTime)); 
} 

をしかし、それが失敗しました。 JodaTime 2.1と2.2の両方でチェックしました。 (SamePropertyValuesAsマッチャーを使用して)

さらに検査障害がcenturyOfEra特性の違いによるものであることを示しています。

originalDateTime.getCenturyOfEra(); // 20 
roundTrip.getCenturyOfEra(); // 21 

なぜこのプロパティの変更、他のすべてません - 年、月、日、曜日、タイムゾーンなど - はありませんか?これはバグですか? DateTimeをカレンダーにラウンドトリップして戻すことはできませんか?またはから変換によって保存されていない

DateTime d = new DateTime(); 
new DateTime(d.toGregorianCalendar()).isEqual(d); // returns true 
new DateTime(d.toGregorianCalendar()).equals(d); // returns false, as you observed 

だからいずれか年表やタイムゾーン:

答えて

1

Joda Timeバージョン2.2は、一方milisecond、年表やタイムゾーンを比較等しいのみmilisecondを比較isEqual方法を有していますGregorianCalender。さらに調査したい場合は、コメントを残してください。

関連する問題