webentwicklung-frage-antwort-db.com.de

Zeit in Millisekunden korrekt in Java.time konvertieren (Java 8)

Ich habe versucht, eine "DateTime" mit dem in Java 8 integrierten Java.time-Paket in Millisekunden zu konvertieren. 

Aber ich konnte es nicht richtig machen. Ich versuche, "29/Jan/2015: 18: 00: 00" in Millisekunden umzuwandeln. Folgendes habe ich versucht

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

Ich habe versucht, LocalDateTime zu verwenden, konnte aber keine Möglichkeit finden, die Konvertierung in Millisekunden effektiv durchzuführen. Ich sage nicht, dass dies der beste Weg ist, dies zu tun. Wenn Sie etwas besseres wissen, würde ich mich über einige Hinweise freuen. 

13
Seagull

Sie sollten Instant::toEpochMilli verwenden.


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

druckt

1422554400000
1422554400
0

Ihre Version hat nicht funktioniert, weil Sie vergessen haben, instant.get(ChronoField.MILLI_OF_SECOND) mit zusätzlichen Nullen aufzufüllen, um sie an drei Stellen auszufüllen.

21
Jeffrey

Von Datums- und Uhrzeitkurse die Tutorials ...

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

Drucke 2015-01-29T18:00

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

Drucke 1422514800000

2
MadProgrammer

Okay, ich glaube, ich habe endlich einen einfachen Weg gefunden, um das zu tun, was ich versuche

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

Druckt 1390903200000

0
Seagull