使具有日期的单元测试在所有时区中通过,并且没有/退出 DST



如何使此单元测试在所有时区中通过,而与 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() );
    }
}

默认情况下,新SimpleDateFormat将使用系统默认时区。如果你想要一个特定的时区,你应该在它上面调用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");
}

对于第二次测试,您需要将其更改为:

new DateTime(0L, DateTimeZone.UTC);

请注意,通常不应使用静态SimpleDateFormat变量,因为它不是线程安全的。(而 Joda Time DateTimeFormatter 实现线程安全的。

或者

你可以比较日期并把

@Ignore("Timezone issues")
@Test

在单元测试中

相关内容

  • 没有找到相关文章