105 Stimmen

Unix-Epochenzeit in Java-Datumsobjekt

Ich habe eine Zeichenkette, die die UNIX-Epochenzeit und ich muss es in ein Java-Date-Objekt konvertieren.

String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
  Date expiry = df.parse(date);
 } catch (ParseException ex) {
  ex.getStackTrace();
}

Die markierte Linie ist der Punkt, an dem ich Probleme habe. Ich kann nicht herausfinden, was das Argument zu SimpleDateFormat() sein sollte, oder sogar, wenn ich SimpleDateFormat() verwenden sollte.

0 Stimmen

Voir meine ausführliche Antwort auf eine ähnliche Frage zur Konvertierung von Millisekunden in Datum-Zeit mit Beispielcode unter Verwendung der Joda-Time-Bibliothek.

0 Stimmen

private String getDateString(long timeInMilliseconds) { SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy 'at' HH:mm:ss z"); return formatter.format(timeInMilliseconds); }

47voto

Ryan Emerle Punkte 14990

Epoche ist die Anzahl der Sekunden seit 1. Januar 1970..

Also:

String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );

Für weitere Informationen: http://www.epochconverter.com/

1 Stimmen

Das funktioniert prima ...IDK Y das wurde noch nicht als Antwort geprüft :)

0 Stimmen

Ich danke Ihnen für diese Antwort. Ich saß hier und versuchte, ein Datum aus einer Epoche zu instanziieren, und das Ergebnis war immer irgendein Tag im Jahr 1970, und es war, weil ich unwissentlich Java Millisekunden, nicht Sekunden gab :)

35voto

Przemek Punkte 6332

Java.time

Die Verwendung des java.time Framework, das in Java 8 und höher integriert ist.

import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

long epoch = Long.parseLong("1081157732");
Instant instant = Instant.ofEpochSecond(epoch);
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]

In diesem Fall sollten Sie besser die ZonedDateTime um es als Datum zu markieren in UTC Zeitzone, da Epoch in UTC definiert ist in Unix-Zeit von Java verwendet.

ZoneOffset enthält eine praktische Konstante für die UTC-Zeitzone, wie in der letzten Zeile oben zu sehen. Seine Oberklasse, ZoneId kann zur Anpassung an andere Zeitzonen verwendet werden.

ZoneId zoneId = ZoneId.of( "America/Montreal" );

0 Stimmen

Gute Antwort. Ich würde vorschlagen, die LocalDateTime und zeigen Sie einfach eine ZonedDateTime . In den meisten Geschäftsanwendungen, ZonedDateTime ist der beste Weg. Die Menschen neigen dazu, sich in Schwierigkeiten/Verwirrungen mit dem LocalXXX Typen.

11voto

tcurdt Punkte 12170
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)

0voto

WolfmanDragon Punkte 7655

Besser noch, verwenden Sie JodaTime . Es ist viel einfacher, Zeichenketten zu analysieren und in Zeichenketten umzuwandeln. Ist auch thread-sicher. Lohnt die Zeit, die Sie für die Implementierung benötigen.

0 Stimmen

Zu Ihrer Information, die Joda-Time Projekt ist jetzt in Wartungsmodus Das Team rät zur Migration auf den java.time Klassen. Siehe Anleitung von Oracle .

0voto

So konvertieren Sie den Sekunden-Zeitstempel in einen Millisekunden-Zeitstempel. Sie können die TimeUnit API verwenden und wie folgt vorgehen.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X