Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

302
Vistas
¿Cómo puedo validar una fecha local dentro del horario de verano?

Mar 12, 2017 02:39:00 "America/Chicago" no existe. Cuando configuro la fecha y la hora en este valor, no falla. La hora se establece en el Mar 12, 2017 03:39:00 una hora más tarde. ¿Cómo puedo ser notificado de que este tiempo no existe. Así es como el tiempo salta hacia adelante

 01:59:59 3:00:00

Como puede ver, 02:39:00 nunca existirá en esta fecha.

Aquí está el código que estoy usando

 package com.company; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; public class Main { public static void main(String[] args) { ZoneId zoneId = ZoneId.of("America/Chicago"); ZonedDateTime dateTimeStart = ZonedDateTime.of(2017, 1, 1, 15, 39, 0, 0, ZoneId.of("America/Chicago")); ZonedDateTime dateTimeStartUtc = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC); ZoneId zoneIdDst = ZoneId.of("America/Chicago"); ZonedDateTime dateTimeStartDst = ZonedDateTime.of(2017, 3, 12, 2, 39, 0, 0, ZoneId.of("America/Chicago")); ZonedDateTime dateTimeStartUtcDst = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC); int y = 90; } }
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su muestra no genera una excepción porque ZonedDateTime.of(..) ajusta la fecha y la hora. Los estados javadoc

Esto crea una fecha y hora dividida en zonas que coincide lo más posible con la fecha y hora local de entrada. Las reglas de zona horaria, como el horario de verano, significan que no todas las fechas y horas locales son válidas para la zona especificada, por lo que se puede ajustar la fecha y hora locales.

Puede usar ZonedDateTime#ofStrict(LocalDateTime, ZoneOffset, ZoneId) para realizar la validación.

Obtiene una instancia de ZonedDateTime validando estrictamente la combinación de fecha y hora local, desplazamiento e ID de zona.

Esto crea una fecha y hora dividida en zonas que garantiza que la compensación sea válida para la fecha y hora local de acuerdo con las reglas de la zona especificada. Si el desplazamiento no es válido, se lanza una excepción.

Primero deberá construir un LocalDateTime . Luego obtendrá el ZoneOffset para su ZoneId para esa fecha y hora local. Luego puede proporcionar los tres a ofStrict .

Por ejemplo,

 ZoneId zoneId = ZoneId.of("America/Chicago"); LocalDateTime ldt = LocalDateTime.of(2017, 3, 12, 2, 39, 0, 0); ZoneOffset zoneOffset = zoneId.getRules().getOffset(ldt); ZonedDateTime zdt = ZonedDateTime.ofStrict(ldt, zoneOffset, zoneId);

tiraría

 Exception in thread "main" java.time.DateTimeException: LocalDateTime '2017-03-12T02:39' does not exist in zone 'America/Chicago' due to a gap in the local time-line, typically caused by daylight savings at java.time.ZonedDateTime.ofStrict(ZonedDateTime.java:484)
about 4 years ago · Santiago Trujillo Denunciar

0

Aquí una validación sin lanzar excepciones. Solo necesita preguntar a las reglas de la zona si un LocalDateTime es válido dentro de una zona horaria determinada:

 public static boolean isValid(LocalDateTime ldt, ZoneId zoneId) { return !zoneId.getRules().getValidOffsets(ldt).isEmpty(); }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda