Podemos crear Instant desde Clock. El reloj tiene una zona horaria.
Clock clock1 = Clock.system(ZoneId.of("Europe/Paris")); Clock clock2 = Clock.system(ZoneId.of("Asia/Calcutta")); System.out.println("Clock1 instant: " + clock1.instant()); System.out.println("Clock2 instant: " + clock2.instant());La salida da el mismo instante:
Clock1 instante: 2022-01-21T18:36:21.848Z
Clock2 instante: 2022-01-21T18:36:21.848Z
Entonces, ¿cuál es el propósito de tener una zona horaria en Clock?
InstantTu dijiste:
La salida da el mismo instante:
Un Instant es un momento tal como se ve en UTC , es decir, con un desplazamiento de UTC de cero horas-minutos-segundos. Por lo tanto, su código no utiliza las zonas horarias especificadas.
ZonedDateTime En su lugar, pruebe ZonedDateTime . Esta clase hace uso de la zona horaria. Por ejemplo, llamar a ZonedDateTime.now() captura el momento actual como se ve en la zona horaria predeterminada actual de la JVM . Llamar ZonedDateTime.now( myClock ) captura el momento actual rastreado por ese objeto Clock como se ve a través de la zona horaria asignada a ese objeto Clock .
System.out.println("Clock1 ZonedDateTime.now: " + ZonedDateTime.now( clock1 ) ); System.out.println("Clock2 ZonedDateTime.now: " + ZonedDateTime.now( clock2 ) ); Vea este código ejecutado en vivo en IdeOne.com . Por cierto, aquí usamos el nuevo nombre de zona horaria Asia/Kolkata en lugar de Asia/Calcutta .
Fíjate en la hora diferente del día, 16:21 versus 20:51. Y observe la zona horaria diferente.
Clock1 ZonedDateTime.now: 2022-01-22T16:21:26.490913+01:00[Europe/Paris] Clock2 ZonedDateTime.now: 2022-01-22T20:51:26.492823+05:30[Asia/Kolkata]Tu preguntaste:
Entonces, ¿cuál es el propósito de tener una zona horaria en Clock?
Esta funcionalidad es útil para realizar pruebas , donde necesitamos crear un escenario conocido con una zona horaria específica en lugar de usar la zona horaria predeterminada real de JVM.