Estoy tratando de convertir a ZonedDateTime milisegundos mediante el siguiente código.
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of(""Asia/Kolkata""));
zonedDateTime.toInstant().toEpochMilli();
Pero esta devuelve milisegundos según la hora local. Y no está considerando idDeZona.
Digamos Vamos LocalDateTime("2019-04-10T05:30")
. Si puedo convertir esto a ZonedDateTime
la Zona de Identificación ( "Asia / Calcuta") entonces yo estoy poniendo ( "2019-04-10T05:30+05:30[Asia/Kolkata]"
). Entonces me convierto a EpochMilli (1554854400000) = ( "Wed Apr 10 2019 00:00:00"
) en UTC.
Está utilizando una Instant
para conseguir que la representación milisegundos. Instantánea no se basa Zona. Ahora, el tiempo de época está basado en el "1970-01-01T00: 00: 00Z", por lo que no debería tener la zona en ella.
Si desea crear una ZoneDateTime
desde el valor de la época, sólo tiene que crear una Instant
en ese momento época y luego crear una ZonedDateTime
con la zona que desee:
//Let's create our zone time (just to keep your logic
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of("Asia/Kolkata"));
//Then get the epoch on GMT
long e = zonedDateTime.toInstant().toEpochMilli();
Instant i = Instant.ofEpochMilli(e);
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.systemDefault()));
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.of("Asia/Kolkata")));
2019-04-12T05: 10: 31.016 + 02: 00 [Europa / París]
2019-04-12T08: 40: 31.016 + 05: 30 [Asia / Calcuta]
Nota: el código no debe ser utilizado como esto antes, no es necesario para obtener una LocalDateTime
continuación, una ZonedDateTime
para crear finalmente una Instant
. Esto es sólo para mostrar que incluso con una zona, esta será "perdido" en un punto.
Sólo tiene que utilizar:
long e = Instant.now().toEpochMilli();