Вопрос по java, timezone – Провести юнит-тесты с датами прохода во всех часовых поясах и без / в летнее время

1

Как сделать так, чтобы этот модульный тест проходил во всех часовых поясах, независимо от того, активен ли 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() );
    }
}

Ваш Ответ

2   ответа
4

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 переменная, так как она не является поточно-ориентированной. (Принимая во внимание, чтоВремя йода DateTimeFormatter реализацияis потокобезопасный.)

Error: User Rate Limit Exceeded Aaron Digulla
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceedednew DateTime(0L)Error: User Rate Limit Exceeded Aaron Digulla
-2

Или вы можете сравнить дату и поставить

@Ignore("Timezone issues")
@Test

В вашем юнит-тесте

Error: User Rate Limit Exceeded Aaron Digulla
Error: User Rate Limit Exceeded

Похожие вопросы