4

DST がアクティブかどうかに関係なく、すべてのタイム ゾーンでこの単体テストに合格するにはどうすればよいですか?

import static org.junit.Assert.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.DateTime;
import org.junit.Test;

public class TimeZoneTest {

    private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( "yyyy.MM.dd'T'HH:mm.ss:SSSZZ" );

    @Test
    public void testUtilDateMillis() throws Exception {
        assertEquals( "1970.01.01T00:00.00:000+0000", DATE_FORMAT.format( new Date( 0L ) ) );
    }

    @Test
    public void testDateTimeMillis() throws Exception {
        assertEquals( "1970-01-01T00:00:00.000+00:00", new DateTime( 0L ).toString() );
    }
}
4

2 に答える 2

7

デフォルトでは、newSimpleDateFormatはシステムのデフォルトのタイム ゾーンを使用します。特定のタイムゾーンが必要な場合は、それを呼び出す必要がありますsetTimeZone

private final static SimpleDateFormat DATE_FORMAT = createFormat();

private static SimpleDateFormat createFormat() {
    // Make sure there are no locale-specific nasties, either...
    SimpleDateFormat ret = new SimpleDateFormat("yyyy.MM.dd'T'HH:mm.ss:SSSZZ",
                                                Locale.US);
    ret.setTimeZone(TimeZone.getTimeZone("Etc/UTC");
}

2 番目のテストでは、次のように変更します。

new DateTime(0L, DateTimeZone.UTC);

SimpleDateFormat静的変数はスレッドセーフではないため、通常は使用しないでください。(一方、Joda Time DateTimeFormatterの実装スレッドセーフです。)

于 2012-05-31T12:52:03.727 に答える
-3

または、日付を比較して置くことができます

@Ignore("Timezone issues")
@Test

単体テストで

于 2016-03-24T05:49:33.090 に答える