zonas zona valor una studio regresa obtener mundo mexico horario horarias horaria hora gettimezone formato fecha cuál atributo actual java java-8 java-time

valor - Java 8 Convierte la hora y zona horaria a la hora UTC



zonas horarias del mundo (3)

Tengo un tiempo con el tipo de cadena como: "2015-01-05 17:00" y ZoneId es "Australia/Sydney" .

¿Cómo puedo convertir esta información de tiempo a la hora UTC correspondiente utilizando la API de Java 8 datetime?

También hay que tener en cuenta las cosas DST.


Está buscando la clase ZonedDateTime en Java8: una fecha y hora completa con zona horaria y desplazamiento resuelto de UTC / Greenwich. En términos de diseño, esta clase debe verse principalmente como la combinación de un LocalDateTime y un ZoneId . ZoneOffset es una pieza de información vital, pero secundaria, que se utiliza para garantizar que la clase represente un instante, especialmente durante la superposición del horario de verano.

Por ejemplo:

ZoneId australia = ZoneId.of("Australia/Sydney"); String str = "2015-01-05 17:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime localtDateAndTime = LocalDateTime.parse(str, formatter); ZonedDateTime dateAndTimeInSydney = ZonedDateTime.of(localtDateAndTime, australia ); System.out.println("Current date and time in a particular timezone : " + dateAndTimeInSydney); ZonedDateTime utcDate = dateAndTimeInSydney.withZoneSameInstant(ZoneOffset.UTC); System.out.println("Current date and time in UTC : " + utcDate);


Una alternativa a la respuesta existente es configurar el formateador con la zona horaria adecuada:

String input = "2015-01-05 17:00"; ZoneId zone = ZoneId.of("Australia/Sydney"); DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(zone); ZonedDateTime utc = ZonedDateTime.parse(input, fmt).withZoneSameInstant(UTC);

Como desea interactuar con una base de datos, puede necesitar un java.sql.Timestamp , en cuyo caso no necesita convertir explícitamente a una hora UTC, sino que puede usar un Instant en su lugar:

ZonedDateTime zdt = ZonedDateTime.parse(input, fmt); Timestamp sqlTs = Timestamp.from(zdt.toInstant());


**// Refactored Logic** ZoneId australia = ZoneId.of("Australia/Sydney"); ZoneId utcZoneID= ZoneId.of("Etc/UTC"); String ausTime = "2015-01-05 17:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); //converting in datetime of java8 LocalDateTime ausDateAndTime = LocalDateTime.parse(ausTime, formatter); // DateTime With Zone ZonedDateTime utcDateAndTime = ausDateAndTime.atZone(utcZoneID); // output - 2015-01-05T17:00Z[Etc/UTC] // With Formating DateTime String utcDateTime = utcDateAndTime.format(formatter); // output - 2015-01-05 17:00