Mire este método para ver qué campos son compatibles. Encontrarás para LocalDateTime
:
•NANO_OF_SECOND
•NANO_OF_DAY
•MICRO_OF_SECOND
•MICRO_OF_DAY
•MILLI_OF_SECOND
•MILLI_OF_DAY
•SECOND_OF_MINUTE
•SECOND_OF_DAY
•MINUTE_OF_HOUR
•MINUTE_OF_DAY
•HOUR_OF_AMPM
•CLOCK_HOUR_OF_AMPM
•HOUR_OF_DAY
•CLOCK_HOUR_OF_DAY
•AMPM_OF_DAY
•DAY_OF_WEEK
•ALIGNED_DAY_OF_WEEK_IN_MONTH
•ALIGNED_DAY_OF_WEEK_IN_YEAR
•DAY_OF_MONTH
•DAY_OF_YEAR
•EPOCH_DAY
•ALIGNED_WEEK_OF_MONTH
•ALIGNED_WEEK_OF_YEAR
•MONTH_OF_YEAR
•PROLEPTIC_MONTH
•YEAR_OF_ERA
•YEAR
•ERA
El campo INSTANT_SECONDS, por supuesto, no es compatible porque LocalDateTime
no puede hacer referencia a ninguna marca de tiempo absoluta (global). Pero lo que es útil es el campo EPOCH_DAY que cuenta los días transcurridos desde 1970-01-01. Pensamientos similares son válidos para el tipo LocalDate
(con campos aún menos admitidos).
Si tiene la intención de obtener el campo milis-since-unix-epoch que no existe, también necesita la zona horaria para convertir de un tipo local a global. Esta conversión se puede hacer mucho más simple, vea otras publicaciones SO .
Volviendo a su pregunta y los números en su código:
The result 1605 is correct
=> (2014 - 1970) * 365 + 11 (leap days) + 31 (in january 2014) + 3 (in february 2014)
The result 71461 is also correct => 19 * 3600 + 51 * 60 + 1
16105L * 86400 + 71461 = 1391543461 segundos desde 1970-01-01T00: 00: 00 (atención, sin zona horaria) Luego puede restar el desplazamiento de la zona horaria (tenga cuidado con la posible multiplicación por 1000 si está en milisegundos).
ACTUALIZAR después de la información de zona horaria dada:
local time = 1391543461 secs
offset = 3600 secs (Europe/Oslo, winter time in february)
utc = 1391543461 - 3600 = 1391539861
Como código JSR-310 con dos enfoques equivalentes:
long secondsSinceUnixEpoch1 =
LocalDateTime.of(2014, 2, 4, 19, 51, 1).atZone(ZoneId.of("Europe/Oslo")).toEpochSecond();
long secondsSinceUnixEpoch2 =
LocalDate
.of(2014, 2, 4)
.atTime(19, 51, 1)
.atZone(ZoneId.of("Europe/Oslo"))
.toEpochSecond();