2015-02-11 22 views
10

Ich habe versucht, eine „Datetime“ auf Millisekunden in Java 8 mit dem java.time Paketeine Zeit Millisekunden richtig in java.time (Java 8) Konvertieren

gebaut zu konvertieren Aber ich habe nicht war in der Lage, es richtig zu machen. Ich versuche "29/Jan/2015: 18: 00: 00" in Millisekunden zu konvertieren. Das Folgende ist etwas 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 LocalDateTime versucht, mit, kann aber nicht einen Weg, um effektiv zu tun, um die Umwandlung in Millisekunden finden. Ich sage nicht, das ist der beste Weg, dies zu tun, wenn Sie etwas besser wissen, würde ich wirklich einige Hinweise zu schätzen wissen.

+0

möglich Duplikat [Java-String to date Konvertierung] (http://stackoverflow.com/questions/4216745/java-string-to-date-conversion) – vanza

+0

Möglichen Duplikat von [Wie Millisekunden erhalten von LocalDateTime in Java 8] (https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8) – Vadzim

Antwort

18

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 Pad instant.get(ChronoField.MILLI_OF_SECOND) mit zusätzlichen Nullen vergessen, es zu 3 Plätze zu füllen.

+0

Vielen Dank, die "toEpochMilli" löste das für mich, Allerdings müsste ich "" 29/Jan/2015: 18: 00: 00 "" in das Format "2015-01-29T18: 00: 00.0z" konvertieren, damit dies mit der Instant-Klasse funktioniert. Ich bin gespannt, was der beste Weg wäre, um "29/Jan/2015: 18: 00: 00" in Millisekunden zu konvertieren. – Seagull

+4

[Eine andere Frage stellen] (https://meta.stackexchange.com/questions/39223/one -post-with-multiple-questions-or-multiple-posts und ich bin mir sicher, dass jemand Ihnen helfen kann. – Jeffrey

2

Von Date and Time Classes 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

+0

Danke für Ihre Zeit, ich könnte das sicherlich getan haben, aber ich suchte nach etwas prägnanter. Die Antwort, die ich gepostet habe, ist mehr oder weniger das, was ich gesucht habe – Seagull

+0

@Seagull So abgesehen von Verkettung der Objekt-Erstellung durch die Methoden Es ist das gleiche ... außer, Sie könnten es auf eine einzige Codezeile reduzieren, aber Sie verlieren die Lesbarkeit ... Sie verlieren auch die Wiederverwendbarkeit, aber das bin nur ich ... – MadProgrammer

+0

Sie haben Recht, Lesbarkeit zu verlieren Durch die Verkettung von Methoden ist das Entscheidende jedoch, dass ich nach einer Möglichkeit suchte, mit weniger mehr zu erreichen. Ich fühle, dass ich das mit meiner Lösung erreicht habe, da es mit einer geringeren Anzahl von Klassen gekoppelt ist. – Seagull

0

Okay, ich glaube, ich schließlich einen einfachen Weg gefunden zu tun, was ich versuche zu tun

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

Drucke 1390903200000

+0

Es gibt einen anderen [link] (http://stackoverflow.com/questions/19431234/converting-between-java-time-localdatetime-and-java-util-date), der gut erklärt, was zu tun ist Hier – Seagull

Verwandte Themen