Saltar al contenido

Convertir ZonedDateTime en LocalDateTime en la zona horaria

Solución:

¿Cómo puedo convertirlo a LocalDateTime en la zona horaria de Suiza?

Puede convertir la UTC ZonedDateTime en un ZonedDateTime con la zona horaria de Suiza, pero manteniendo el mismo instante en el tiempo, y luego obtener el LocalDateTime fuera de eso, si es necesario. Me sentiría tentado a mantenerlo como ZonedDateTime a menos que lo necesite como LocalDateTime aunque por alguna otra razón.

ZonedDateTime utcZoned = ZonedDateTime.of(LocalDate.now().atTime(11, 30), ZoneOffset.UTC);
ZoneId swissZone = ZoneId.of("Europe/Zurich");
ZonedDateTime swissZoned = utcZoned.withZoneSameInstant(swissZone);
LocalDateTime swissLocal = swissZoned.toLocalDateTime();

Ayuda a comprender la diferencia entre LocalDateTime y ZonedDateTime. Lo que realmente quieres es un ZonedDateTime. Si quisiera eliminar la zona horaria de la representación de la cadena, la convertiría en una LocalDateTime.

Lo que busca es:
ZonedDateTime swissZonedDateTime = withZoneSameInstant(ZoneId.of("Europe/Zurich"));

LocalDateTime – esta es básicamente una representación de cadena glorificada de un Date y Time; es independiente de la zona horaria, lo que significa que no representa ningún punto en el tiempo en una línea de tiempo

Instante – esta es una representación en milisegundos del tiempo transcurrido desde EPOCH. Esto representa un instante específico en el tiempo en una línea de tiempo.

ZonedDateTime – esto también representa un instante en el tiempo en una línea de tiempo, pero lo representa como un Date y Time con un TimeZone.

El siguiente código ilustra cómo usar los 3.

LocalDateTime localDateTime = LocalDateTime.of(2018, 10, 25, 12, 00, 00);  //October 25th at 12:00pm
ZonedDateTime zonedDateTimeInUTC = localDateTime.atZone(ZoneId.of("UTC")); 
ZonedDateTime zonedDateTimeInEST = zonedDateTimeInUTC.withZoneSameInstant(ZoneId.of("America/New_York")); 
    
System.out.println(localDateTime.toString()); // 018-10-25T12:00
System.out.println(zonedDateTimeInUTC.toString()); // 2018-10-25T12:00Z[UTC]
System.out.println(zonedDateTimeInEST.toString()); // 2018-10-25T08:00-04:00[America/New_York]

Si tuvieras que comparar el Instant valores de ambos ZonedDateTimes desde arriba, serían equivalentes porque ambos apuntan al mismo instante en el tiempo. En algún lugar de Greenwich (zona horaria UTC), es mediodía del 25 de octubre; al mismo tiempo, en Nueva York, serían las 8 am (zona horaria de América / Nueva York).

Probar esto. Sustituya US / Central por su zona horaria.

ZonedDateTime z = ZonedDateTime.of(LocalDate.now().atTime(11, 30), ZoneOffset.UTC);

System.out.println(z.withZoneSameInstant(ZoneId.of("US/Central")));
¡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 *