2015-02-11 17 views
10

Próbowałem przekonwertować „DateTime” do milisekund wykorzystujących pakiet java.time wbudowany w Javie 8.Konwersja czas do milisekundy prawidłowo java.time (Java 8)

Ale nie mam udało się zrobić to poprawnie. Próbuję przekonwertować "29/Jan/2015: 18: 00: 00" na milisekundy. Poniżej znajduje coś próbowałem

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 

Próbowałem za pomocą LocalDateTime, ale nie mógł znaleźć sposób, aby skutecznie zrobić konwersję do milisekund. Nie mówię, że jest to najlepszy sposób, aby to zrobić, jeśli wiesz coś lepszego, naprawdę doceniłbym pewne wskazówki.

+0

możliwe duplikat [Java ciąg do tej pory nawrócenia] (http://stackoverflow.com/questions/4216745/java-string-to-date-conversion) – vanza

+0

Możliwy duplikat [Jak uzyskać milisekund od LocalDateTime w Javie 8] (https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8) – Vadzim

Odpowiedz

18

Powinieneś użyć Instant::toEpochMilli.


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

drukuje

1422554400000 
1422554400 
0 

Twoja wersja nie działa, ponieważ zapomniał pad instant.get(ChronoField.MILLI_OF_SECOND) z dodatkowych zer, aby wypełnić go do 3 miejsc.

+0

Dziękuję, "toEpochMilli" rozwiązało to dla mnie, jednak musiałbym przekonwertować format "" 29/Jan/2015: 18: 00: 00 "" na "" 2015-01-29T18: 00: 00.0z ", aby działał z klasą Instant. Jestem ciekawy, jaki byłby najlepszy sposób konwersji "29/Jan/2015: 18: 00: 00" na milisekundy – Seagull

+4

[Zadaj inne pytanie] (https://meta.stackexchange.com/questions/39223/one -post-with-multiple-questions-or-multiple-posts) i jestem pewien, że ktoś będzie w stanie Ci pomóc. – Jeffrey

2

Od Date and Time Classes tutoriali ...

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); 

Drukuje 2015-01-29T18:00

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

Drukuje 1422514800000

+0

Dzięki za poświęcony mi czas, mogłem to zrobić, ale szukałem czegoś bardziej zwięzłego. Odpowiedź, którą zamieściłem, jest mniej więcej tym, czego szukałem. – Seagull

+0

@Seagull Tak więc, oprócz łączenia w łańcuchy tworzenia obiektów za pomocą metod , to jest to samo ... z wyjątkiem, możesz zredukować to do pojedynczej linii kodu, ale tracisz czytelność ... Ty też tracisz możliwość ponownego użycia, ale to tylko ja ... – MadProgrammer

+0

Masz rację, tracąc czytelność za pomocą łańcuchów metod jednak najważniejsze jest to, że szukałem sposobu na więcej za mniej. Czuję, że osiągnąłem to dzięki rozwiązaniu, ponieważ jest ono połączone z mniejszą liczbą klas. – Seagull

0

Okay, myślę, że w końcu znalazł w łatwy sposób zrobić to, co usiłuję do

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

Drukuje 1390903200000

+0

Istnieje inny [link] (http://stackoverflow.com/questions/19431234/converting-between-java-time-localdatetime-and-java-util-date), który dobrze wyjaśnia objaśnienie, co należy zrobić tutaj – Seagull

Powiązane problemy