Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!