it-swarm.com.ru

Правильное преобразование времени в миллисекунды в Java.time (Java 8)

Я пытался преобразовать DateTime в миллисекунды с помощью пакета Java.time, встроенного в Java 8. 

Но я не смог сделать это правильно. Я пытаюсь преобразовать «29/Jan/2015: 18: 00: 00» в миллисекунды. Вот что я пробовал

Instant instant = Instant.parse("2015-01-29T18:00:00.0z");
Long instantMilliSeconds = Long.parseLong(instant.getEpochSecond() + "" + instant.get(ChronoField.MILLI_OF_SECOND));
System.out.println(new Date(instantMilliSeconds)); // prints Sun Jun 14 05:06:00 PDT 1970

Я попытался использовать LocalDateTime, но не смог найти способ эффективно выполнить преобразование в миллисекунды. Я не говорю, что это лучший способ сделать это, если вы знаете что-то лучше, я был бы очень признателен за некоторые советы. 

13
Seagull

Вы должны использовать Instant::toEpochMilli .


System.out.println(instant.toEpochMilli());
System.out.println(instant.getEpochSecond());
System.out.println(instant.get(ChronoField.MILLI_OF_SECOND));

печать

1422554400000
1422554400
0

Ваша версия не работает, потому что вы забыли заполнить instant.get(ChronoField.MILLI_OF_SECOND) дополнительными нулями, чтобы заполнить ее в 3 местах.

21
Jeffrey

С Дата и время Классы учебники ...

DateTimeFormatter formatter
                    = DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss");
LocalDateTime date = LocalDateTime.parse("29/Jan/2015:18:00:00", formatter);
System.out.printf("%s%n", date);

Печатает 2015-01-29T18:00

ZoneId id = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.of(date, id);
System.out.println(zdt.toInstant().toEpochMilli());

Печатает 1422514800000

2
MadProgrammer

Хорошо, я думаю, что я наконец нашел легкий способ сделать то, что я пытаюсь сделать

LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());

Отпечатки 1390903200000

0
Seagull