¿Cuál es la diferencia entre ZonedDateTime.withZoneSameInstant y ZonedDateTime.withZoneSameLocal?

John :

Digamos que tengo un ZonedDateTime:

ZonedDateTime zonedDateTime = 
     ZonedDateTime.of(LocalDateTime.now(), ZoneId.of("US/Pacific"));

Me gustaría saber qué fecha / hora, es decir nos dejó en Berlín. Tengo dos métodos:

zonedDateTime.withZoneSameInstant(ZoneId.of("Europe/Berlin")); // probably this is the right one to get the corresponding date/time in Berlin

zonedDateTime.withZoneSameLocal(ZoneId.of("Europe/Berlin"));

Los documentos de la withZoneSameLocalpalabra método: "La fecha y hora local solamente se cambia si no es válido para la nueva zona ..." y no es claro cuando esto realmente puede suceder (ningún ejemplo =?)).

¿Qué fecha / hora cada uno de ellos representa y cuál es la diferencia?

shmosel:

Si desea convertir una marca de tiempo de una zona horaria a otra, utilice withZoneSameInstant(). withZoneSameLocal()cambiará la zona, pero mantener todos los demás campos de la misma. La excepción es en la que sería una fecha no válida en esa zona horaria.

Por ejemplo,

ZonedDateTime dtUTC = ZonedDateTime.parse("2019-03-10T02:30:00Z");
ZoneId pacific = ZoneId.of("US/Pacific");
System.out.println(dtUTC.withZoneSameInstant(pacific));
System.out.println(dtUTC.withZoneSameLocal(pacific));

huellas dactilares

2019-03-09T18:30-08:00[US/Pacific]
2019-03-10T03:30-07:00[US/Pacific]

La primera línea es la marca de tiempo original, convertida a otra zona horaria. El segundo intentos para preservar los campos de fecha / hora, pero 2:30 no es una hora válida en esa fecha (debido a los ahorros salto luz día), por lo que se desplaza por una hora.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=167924&siteId=1
Recomendado
Clasificación