Saltar al contenido

Cómo abordar el horario de verano con TimeZone en Java

Solución:

Este es el problema para empezar:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));

Las abreviaturas de 3 letras deben evitarse por completo en favor de las ID de zona TZDB. EST es oriental Estándar Tiempo y Estándar el tiempo nunca observa el horario de verano; no es realmente un nombre de zona horaria completo. Es el nombre que se usa para parte de una zona horaria. (Desafortunadamente, no he encontrado un buen término para este concepto de “zona horaria media”).

Quieres un lleno nombre de la zona horaria. Por ejemplo, America/New_York está en la zona horaria del este:

TimeZone zone = TimeZone.getTimeZone("America/New_York");
DateFormat format = DateFormat.getDateTimeInstance();
format.setTimeZone(zone);

System.out.println(format.format(new Date()));

Otras respuestas son correctas, especialmente la de Jon Skeet, pero desactualizadas.

java.time

Estas antiguas clases de fecha y hora han sido suplantadas por el marco java.time integrado en Java 8 y versiones posteriores.

Si simplemente desea la hora actual en UTC, use el Instant clase.

Instant now = Instant.now();

EST no es una zona horaria, como se explica en la Respuesta correcta de Jon Skeet. Estos códigos de 3-4 letras no están estandarizados ni son únicos, y aumentan la confusión sobre el horario de verano (DST). Utilice un nombre de zona horaria adecuado en el formato “continente / región”.

¿Quizás te refieres a la hora estándar del este en la costa este de América del Norte? ¿O la hora estándar de Egipto? ¿O la hora estándar europea?

ZoneId zoneId = ZoneId.of( "America/New_York" );
ZoneId zoneId = ZoneId.of( "Africa/Cairo" );
ZoneId zoneId = ZoneId.of( "Europe/Lisbon" );

Utilice cualquiera de esos ZoneId objeto para ajustar el momento actual a una zona horaria en particular para producir un ZonedDateTime objeto.

ZonedDateTime zdt = ZonedDateTime.now( zoneId ) ;

Ajuste ese ZonedDateTime en una zona horaria diferente produciendo otro objeto ZonedDateTime desde el primero. El marco java.time utiliza objetos inmutables en lugar de cambiar (mutar) objetos existentes.

ZonedDateTime zdtGuam = zdt.withZoneSameInstant( ZoneId.of( "Pacific/Guam" ) ) ;

Tabla de tipos de fecha y hora en Java, tanto moderno como heredado.

En lugar de ingresar “EST” para la zona horaria, puede ingresar “EST5EDT” como tal. Como señaló, simplemente “EDT” no funciona. Esto explicará el problema del horario de verano. La línea de código se ve así:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST5EDT"));
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *