Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fun with (Java) Time

Fun with (Java) Time

Avatar for Brais Gabín

Brais Gabín

January 19, 2022

Other Decks in Programming

Transcript

  1. Unidades básicas Sistema Internacional Segundo oscilaciones de cesio 133* Relojes

    atómicos 1s = 9.192.631.770 *Un segundo es la duración de 9 192 631 770 oscilaciones de la radiación emitida en la transición entre los dos niveles hiper fi nos del estado fundamental del isótopo 133 del átomo de cesio (133Cs), a una temperatura de 0 K 
 Fuente: https://es.wikipedia.org/wiki/Segundo
  2. Unidades básicas Sistema Internacional Segundo oscilaciones de cesio 133* Relojes

    atómicos 1s = 9.192.631.770 Calendario civil Día giro de 360º de la tierra 1d =
  3. Unidades básicas Sistema Internacional Segundo oscilaciones de cesio 133* Relojes

    atómicos 1s = 9.192.631.770 Calendario civil Día giro de 360º de la tierra El segundo es una métrica derivada 1d = 1s = 1d 24 × 60 × 60 = 1d 86.400 86.400s = 1d
  4. La tierra no tarda 86.400 segundos en dar una vuelta

    completa (en general tarda más)
  5. UTC — Coordinated Universal Time Antes se usaba GMT Basado

    en relojes atómicos Segundos intercalares Junio o Diciembre UTC presenta problemas para representar fechas futuras Se desconocen los segundos intercalares No depende del horario de verano
  6. Zona horaria Una zona horaria se identi fi ca con

    un ZoneId Ejemplo: Europe/Madrid, America/New_York Cada Zona horaria tiene unas reglas Las reglas las de fi nen los gobiernos de cada país Horario de verano Hay entidades que se encarga de agrupar esto Ejemplo: TZDB
  7. Unix Time (Epoch Time) Basado en UTC Describe un instante

    en el tiempo Unix epoch: 01/01/1970T00:00:00Z No es lineal con respecto a UTC No contempla los segundos intercalares Java Time usa Unix Time
  8. Resolución vs precisión Java Time tiene una resolución de nanosegundos

    El reloj de tu móvil no refresca el tiempo cada nanosegundo .now() devuelve muchos ceros al fi nal Java Time solo fuerza precisión de segundos Es seguro pensar que tienes una precisión de milisegundos
  9. Tipos: Epoch Time Instant data class Instant( 
 val epochSeconds:

    Long, 
 val nano: Int, 
 ) OffsetDateTime ZonedDateTime Duration
  10. Tipos: Epoch Time Instant OffsetDateTime data class OffsetDateTime( 
 val

    instant: Instant, 
 val offset: Offset, 
 ) ZonedDateTime Duration
  11. Tipos: Epoch Time Instant OffsetDateTime ZonedDateTime data class ZonedDateTime( 


    val instant: Instant, 
 val zondeId: ZoneId, 
 ) Duration
  12. Tipos: Calendario civil LocalDate LocalTime LocalDateTime Period data class Period(

    
 val years: Int, 
 val months: Int, 
 val days: Int, 
 )
  13. Ejemplos Cumpleaños: LocalDate Fecha apertura de una tienda: LocalTime LocalTime

    + ZoneId ZonedLocalTime Publicación de un post: Instant ZonedDateTime
  14. TL;DR LocalXX: Calendario civil Instant: UTC No horario de verano

    OffsetXX: Estático No puede hacer cambios de horario de verano ZonedXX: Dinámico Sabe hacer cambios de horario de verano
  15. Bibliografía - https://www.threeten.org/articles/ - https://es.wikipedia.org/wiki/Segundo_intercalar - https://es.wikipedia.org/wiki/Horario_de_verano - https://github.com/nodatime/nodatime/blob/master/src/ NodaTime.Demo/StackOver

    fl owExamples.cs#L68 - https://stackover fl ow.com/a/6841479 - https://docs.oracle.com/javase/8/docs/api/index.html - https://en.wikipedia.org/wiki/ISO_8601 - https://www.baeldung.com/java-8-date-time-intro - https://github.com/JakeWharton/ThreeTenABP/blob/trunk/ CHANGELOG.md - https://es.wikipedia.org/wiki/Tiempo_universal_coordinado