Ich muss einen Unix-Zeitstempel in ein Datumsobjekt konvertieren.
Ich habe es versucht:
java.util.Date time = new java.util.Date(timeStamp);
Der Zeitstempelwert ist: 1280512800
Das Datum sollte "30.07.2010 - 22:30:00" sein (wie ich es von PHP bekomme), aber stattdessen bekomme ich Thu Jan 15 23:11:56 IRST 1970
.
Wie soll es gemacht werden?
java.util.Date
jetzt Legacy sind , werden durch die Klassen java.time ersetzt . Siehe Tutorial von Oracle .Antworten:
Für
1280512800
, multipliziert mit 1000, da Java erwartet Millisekunden:Wenn Sie bereits Millisekunden hatten, dann nur
new java.util.Date((long)timeStamp);
Aus der Dokumentation :
quelle
(long)
ist sehr wichtig: Ohne sie läuft die ganze Zahl über.java.util.Date
ist der vollständig qualifizierte Name der Klasse.Date
ist wahrscheinlich genau das Gleiche, vorausgesetzt, Sie importieren dasjava.util
Paket in Ihre Klasse.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
jetzt Legacy sind , werden durch die Klassen java.time ersetzt . Siehe Tutorial von Oracle .java.time
Java 8 hat eine neue API für die Arbeit mit Datum und Uhrzeit eingeführt : das Paket java.time .
Mit java.time können Sie Ihre Anzahl ganzer Sekunden seit dem Epochenbezug des ersten Augenblicks von 1970 in UTC, 1970-01-01T00: 00Z, analysieren. Das Ergebnis ist ein
Instant
.Wenn Sie einen benötigen
java.util.Date
, um mit altem Code zusammenzuarbeiten, der für java.time noch nicht aktualisiert wurde , konvertieren Sie. Rufen Sie neue Konvertierungsmethoden auf, die zu den alten Klassen hinzugefügt wurden.quelle
java.util.Date
. Die alten Klassen sind Vermächtnis und sollten vermieden werden. Während Sie tatsächlich in die Legacy- und java.time-Klassen konvertieren können, ist es am besten, wenn immer möglich bei java.time zu bleiben.Das ist der richtige Weg:
quelle
Der Kalender scheint der neue Weg zu sein:
Die letzte Zeile ist nur ein Beispiel für die Verwendung. Diese würde zB "14.06.2012" drucken.
Wenn Sie System.currentTimeMillis () zum Speichern des Zeitstempels verwendet haben, benötigen Sie den Teil "* 1000" nicht.
Wenn Sie den Zeitstempel in einer Zeichenfolge haben, müssen Sie ihn zuerst als Long analysieren: Long.parseLong (Zeitstempel).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
quelle
timestamp
es sich um eine Ganzzahl handelt, müssen Sie diese(long)
zuerst umwandeln, da Sie sonst falsche Daten erhalten.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .tl; dr
java.time
Das neue Java.time-Framework, das in Java 8 und höher integriert ist, ist der Nachfolger von Joda-Time.
Diese neuen Klassen enthalten eine praktische Factory-Methode zum Konvertieren einer Anzahl von ganzen Sekunden aus der Epoche. Sie erhalten
Instant
einen Moment auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden.Sehen Sie, wie der Code live auf IdeOne.com ausgeführt wird .
Asia/Kabul
oderAsia/Tehran
Zeitzonen?Sie haben angegeben, dass Sie einen Tageszeitwert von 22:30 anstelle von 18:00 erhalten. Ich vermute, dass Ihr PHP-Dienstprogramm implizit eine Standardzeitzone zum Anpassen von UTC anwendet. Mein Wert hier ist UTC, bezeichnet durch
Z
(kurz fürZulu
bedeutet UTC). Gibt es eine Chance, dass Ihr Betriebssystem oder PHP aufAsia/Kabul
oderAsia/Tehran
Zeitzonen eingestellt ist? Ich nehme an, wie SieIRST
in Ihrer Ausgabe berichten, was anscheinend Iran-Zeit bedeutet. Derzeit sind dies 2017 die einzigen Zonen mit einer Sommerzeit, die viereinhalb Stunden vor UTC liegt.Geben Sie einen richtigen Zeitzonennamen im Format
continent/region
, wie zum BeispielAmerica/Montreal
,Africa/Casablanca
oderPacific/Auckland
. Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben wieEST
oderIST
oder,IRST
da es sich nicht um echte Zeitzonen handelt, die nicht standardisiert und nicht einmal eindeutig (!) Sind.Wenn Sie Ihren Moment durch die Linse der Zeitzone einer bestimmten Region sehen möchten , wenden Sie a
ZoneId
an , um a zu erhaltenZonedDateTime
. Immer noch der gleiche gleichzeitige Moment, aber als eine andere Wanduhrzeit gesehen .Konvertieren von java.time in Legacy-Klassen
Sie sollten bei den neuen java.time-Klassen bleiben. Bei Bedarf können Sie jedoch in alte konvertieren.
Joda-Zeit
UPDATE: Das Joda-Time- Projekt befindet sich jetzt im Wartungsmodus. Das Team empfiehlt die Migration zu den Klassen java.time .
Zu Ihrer Information , der Konstruktor für eine Joda-Time DateTime ist ähnlich: Multiplizieren Sie mit Tausend, um eine
long
(keineint
!) Zu erzeugen .Vermeiden Sie am besten die notorisch lästigen Klassen java.util.Date und .Calendar. Wenn Sie jedoch ein Datum verwenden müssen, können Sie von Joda-Time konvertieren.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für
java.sql.*
Klassen.Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
Der Konstruktor von Date erwartet, dass der timeStamp-Wert in Millisekunden angegeben wird. Multiplizieren Sie den Wert Ihres Zeitstempels mit 1000 und übergeben Sie ihn an den Konstruktor.
quelle
Wenn Sie einen Zeitstempelwert auf einem anderen Computer konvertieren, sollten Sie auch die Zeitzone dieses Computers überprüfen. Beispielsweise;
Die obigen Beschreibungen führen zu unterschiedlichen Datumswerten, wenn Sie mit EST- oder UTC-Zeitzonen arbeiten.
Zeitzone einstellen; aka zu UTC, können Sie einfach umschreiben;
quelle
Für Kotlin
quelle
Manchmal müssen Sie mit Anpassungen arbeiten.
Verwenden Sie Cast nicht zu lange! Verwenden Sie die Nanoanpassung.
Wenn Sie beispielsweise die Oanda Java API für den Handel verwenden, können Sie datetime als UNIX-Format erhalten.
Zum Beispiel: 1592523410.590566943
du erhältst:
Auch verwenden:
quelle
quelle