2015-02-11 2 views
10

Я пытался преобразовать «DateTime» в миллисекундах с использованием пакета java.time встроенный в Java 8.Преобразование времени в миллисекундах правильно в 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, но не мог найти способ эффективного выполнения преобразования в миллисекундах. Я не говорю, что это лучший способ сделать это, если вы знаете что-то лучшее, я бы очень признателен за некоторые указатели.

+0

возможно дубликат [Java строки для преобразования даты] (http://stackoverflow.com/questions/4216745/java-string-to-date-conversion) – vanza

+0

Возможный дубликат [Как получить миллисекунды от LocalDateTime в Java 8] (https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8) – Vadzim

ответ

18

Вы должны использовать 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-х мест.

+0

Спасибо, «toEpochMilli» решил это для меня, однако мне пришлось бы преобразовать «29/янв/2015: 18: 00: 00« »в формат« 2015-01-29T18: 00: 00.0z », чтобы это работало с классом Instant. Мне любопытно узнать, что было бы лучшим способом конвертировать «29/Jan/2015: 18: 00: 00» в миллисекунды – Seagull

+4

[задать другой вопрос] (https://meta.stackexchange.com/questions/39223/one -post-with-multiple-questions-or-multiple-posts), и я уверен, что кто-то сможет вам помочь. – Jeffrey

2

С Date and Time Classes учебные пособия ...

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

+0

Спасибо за ваше время, я мог бы это сделать, но я искал что-то более сжатое. Ответ, который я написал, более или менее то, что я искал – Seagull

+0

@Seagull Итак, помимо цепочки создания объекта с помощью методов , это то же самое ... за исключением того, что вы могли бы свести его к одной строке кода, но вы теряете читаемость ... Вы также теряете возможность повторного использования, но это только я ... – MadProgrammer

+0

Вы правы в том, что теряете читаемость однако, благодаря цепочке методов, суть в том, что я искал способ сделать больше с меньшими затратами. Я чувствую, что поступил так, что с моим решением, поскольку он связан с меньшим количеством классов – Seagull

0

Ладно, я думаю, что я наконец-то нашел простой способ сделать то, что я пытаюсь do

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

Печать 1390903200000

+0

Существует еще [ссылка] (http://stackoverflow.com/questions/19431234/converting-between-java-time-localdatetime-and-java-util-date), которая хорошо объясняет, что нужно сделать Вот – Seagull