tl; dr
Wie kann ich die oben Zeichenfolge in Unix-Zeitstempel-Format konvertieren?
Instant.parse("2014-09-01T19:22:43.000Z")
.getEpochSecond()
java.time
Die java.time.Instant
Klasse Ihres Eingabestring mit seinem Standard ISO 8601-Format analysieren kann. Sie müssen kein Formatierungsmuster angeben.
long millisecondsSinceUnixEpoch = instant.toEpochMilli() ;
Für ganze Sekunden seit Epoche der 1970-01-01T00: 00: 00Z:
Instant instant = Instant.parse("2014-09-01T19:22:43.000Z");
Um eine Anzahl von Millisekunden seit Beginn der Epoche von 1970 zu erhalten
long secondsSinceUnixEpoch = instant.getEpochSecond() ;
Be bewusst möglichen Datenverlust wenn in Millisekunden oder ganze Sekunden gehen. Die java.time-Klassen haben eine Auflösung im Nanosekundenbereich, so dass alle Mikrosekunden oder Nanosekunden, die im Wert vorhanden sind, abgeschnitten werden.
Joda-Time
aktualisieren Die Joda-Time Projekt ist jetzt in den Wartungsmodus. Das Team empfiehlt die Migration in die Klassen java.time.
Die Joda-Time-Bibliothek erleichtert diese Arbeit. Ihre ISO 8601 konforme Zeichenfolge kann direkt einem Joda-Time-Konstruktor zugeführt werden. Der eingebaute Parser erwartet ISO 8601.
DateTime dateTime = new DateTime("2014-09-01T19:22:43.000Z") ;
Unix Timestamp
Was meinst du mit einem Unix-Zeitstempel? Manche Leute meinen eine ganze Anzahl von Sekunden seit dem ersten Moment von 1970 UTC (der Unix epoch) während ich Schaltsekunden ignoriere (siehe Unix Time). Manche Leute meinen eine Anzahl von Millisekunden oder eine andere Auflösung.
Beachten Sie die Verwendung eines long
primitiven statt der häufiger int
.
Rufen Sie für Millisekunden getMillis()
.
long millisecondsSinceUnixEpoch = dateTime.getMillis();
Teilen Sie für ganze Sekunden durch 1.000. Berücksichtigen Sie, ob Sie die Bruchsekunden runden oder abschneiden möchten.
Normalerweise würde ich empfehlen, ein DateTimeZone-Objekt zusammen mit Ihrer Zeichenfolge an den DateTime-Konstruktor zu übergeben. Aber keine Notwendigkeit, wenn alles, was Sie wollen, eine Zählung seit der Epoche ist.
Über java.time
Der java.time Rahmen in Java 8 gebaut und später. Diese Klassen ersetzen die problematischen alten legacy Datum-Uhrzeit-Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Projekt Joda-Time, jetzt in maintenance mode, rät zur Migration auf die Klassen java.time.
Weitere Informationen finden Sie unter Oracle Tutorial. Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310.
Wo erhalten Sie die Klassen java.time?
- Java SE 8, Java SE 9 und später
- Built-in.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und Java SE 7
- Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 & 7 in ThreeTen-Backport.
- Android
- Spätere Versionen von Android-Bundle Implementierungen der java.time Klassen.
- Für frühere Android, das ThreeTenABP Projekt passt ThreeTen-Backport (oben erwähnt). Siehe How to use ThreeTenABP….
Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Hier finden Sie einige nützliche Klassen wie Interval
, , YearQuarter
und more.
FYI, die lästigen alten Datum-Zeit-Klassen wie ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html) , ['java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) und' java.text.SimpleDateFormat sind nun [legacy] (https://en.wikipedia.org/wiki/Legacy_system), ersetzt durch [java.time] (https://docs.oracle.com/javase/9/docs/api/ java/time/package-summary.html) Klassen, die in Java 8 und Java 9 eingebaut sind. Siehe [Tutorial von Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –