私はテストをしています:
@Test
public void testJodaStartDate2a() {
DateTime dateTime = new DateTime(2010,10,10,4,0, DateTimeZone.forID("America/Caracas"));
MutableDateTime mutableDateTime = dateTime.toMutableDateTime();
mutableDateTime.setDate(dateTime);
assertEquals(dateTime, mutableDateTime.toDateTime());
}
これは簡単です。その中で、dateTime値の日付部分をdateTime値の日付部分に設定します。これは有効である必要があり、アサーションは成功するはずです。ただし、失敗します。
Jodaのメソッドをデバッグできないため、setDate()が実行する必要があることをエミュレートする別のテストを作成しました。
@Test
public void testJodaStartDate() {
DateTime dateTime = new DateTime(2010,10,10,4,0, DateTimeZone.forID("America/Caracas"));
long instantMillis = DateTimeUtils.getInstantMillis(dateTime);
Chronology instantChrono = DateTimeUtils.getInstantChronology(dateTime);
DateTimeZone zone1 = instantChrono.getZone();
if (zone1 != null) {
instantMillis = zone1.getMillisKeepLocal(DateTimeZone.UTC, instantMillis);
}
MutableDateTime mutableDateTime = dateTime.toMutableDateTime();
mutableDateTime.setMillis(mutableDateTime.getChronology().millisOfDay().set(instantMillis,
mutableDateTime.getMillisOfDay()));
assertEquals(dateTime, mutableDateTime);
}
このテストは、setDate()の内容のコピーです。デバッグ中に見たように、最初は
long instantMillis = DateTimeUtils.getInstantMillis(dateTime);
InstantMillis変数には、2010-10-10 04:00(VET)および2010-10-10 08:30(UTC)である1286699400000の値が割り当てられます。
後
instantMillis = zone1.getMillisKeepLocal(DateTimeZone.UTC, instantMillis);
InstantMillisは1286683200000で、2010-10-10 00:00(VET)および2010-10-10 04:00(UTC)です。
アサーションでは、mutableDateTimeのミリ秒値は1286613000000であり、2010-10- 09 04:00(VET)および2010-10- 09 08:30(UTC)です。
この関数は、mutableDateTimeの日付部分をパラメーター値の日付部分に再計算するだけのものではありませんか?テストで何が欠けていますか?大変感謝しております。