java - sirven - planisferio husos horarios
Realice pruebas unitarias con fechas que pasan en todas las zonas horarias y con/sin DST (2)
De manera predeterminada, un nuevo SimpleDateFormat
usará la zona horaria predeterminada del sistema. Si desea una zona horaria específica, debe llamar a setTimeZone
en ella:
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");
}
Para su segunda prueba, querrá cambiarla a:
new DateTime(0L, DateTimeZone.UTC);
Tenga en cuenta que generalmente no debería usar una variable estática SimpleDateFormat
, ya que no es segura para subprocesos. (Mientras que la implementación Joda Time DateTimeFormatter
es thread-safe.)
¿Cómo hago que esta prueba de unidad pase en todas las zonas horarias independientemente de si el horario de verano está activo o no?
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() );
}
}
O puede comparar la fecha y poner
@Ignore("Timezone issues")
@Test
En tu unidad de prueba