Правильное преобразование времени в миллисекунды в java.time(Java 8)
Я пытаюсь преобразовать "DateTime" в миллисекунды, используя пакет java.time, встроенный в Java 8.
Но я не смог сделать это правильно. Я пытаюсь преобразовать "29/янв/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
, но не смог найти способ эффективно выполнить преобразование в миллисекундах. Я не говорю, что это лучший способ сделать это, если вы знаете что-то лучшее, я бы очень признателен за некоторые указатели.
Ответы
Ответ 1
Вы должны использовать 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-х мест.
Ответ 2
Из классы даты и времени учебные пособия...
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
Ответ 3
Хорошо, я думаю, что, наконец, нашел простой способ сделать то, что я пытаюсь сделать
LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());
Печать 1390903200000