Wie erhalte ich Millisekunden aus der Epoche (1970-01-01) in Java?

78

Ich muss die Anzahl der Millisekunden von 1970-01-01 UTC bis jetzt UTC in Java ermitteln.

Ich möchte auch in der Lage sein, die Anzahl der Millisekunden von 1970-01-01 UTC auf eine andere UTC-Datumszeit zu übertragen.

PaulG
quelle
1
es zeigt keinen Forschungsaufwand.
Lordo
1
@PaulG - Der Hauptgrund für die Ablehnung ist der Forschungsaufwand . Die Frage wird von einem einfachen Google gelöst.
Brian Roach
3
Dieser Link kann hilfreich sein .
Marko Topolnik

Antworten:

162

Wie wäre es mit System.currentTimeMillis()?

Aus dem JavaDoc:

Rückgabe: Die Differenz, gemessen in Millisekunden, zwischen der aktuellen Zeit und Mitternacht, dem 1. Januar 1970 UTC

Java 8 führt das java.timeFramework ein, insbesondere die InstantKlasse, die " ... einen ... Punkt auf der Zeitachse modelliert ... ":

long now = Instant.now().toEpochMilli();

Rückgabe: Die Anzahl der Millisekunden seit der Epoche 1970-01-01T00: 00: 00Z - dh so ziemlich die gleiche wie oben :-)

Prost,

Anders R. Bystrup
quelle
3
Da diese Antwort 2012 war und Java 8 nicht verfügbar war, ist sie gut. Ebenso gut ist die java.time Antwort von Prezemek. Dies berücksichtigt das aktuelle Java 8 java.time-Framework.
Zack Jannsen
1
Zur Bearbeitung: Ich habe einige Möglichkeiten getestet, um eine UTC-Zeit in Millisekunden zu erhalten, und festgestellt, dass java.time.Instant.now (). ToEpochMilli gut funktioniert. Ich habe dies mit den Methodenoptionen der ZonedDateTime.now (ZoneOffset.UTC) -Methode (die ich in anderen Posts als Optionen gesehen habe) verglichen, und wie erwartet war der Java.time.Instant.now () -Ansatz auf meinem Computer etwas schneller ... niedrige einstellige Millisekunden in dreißig aufeinanderfolgenden Läufen.
Zack Jannsen
Denken Sie auch daran, dass System.currentTimeInMs()nicht jede Millisekunde aktualisiert wird!
Höhlenmensch
45

java.time

Verwenden des java.timein Java 8 und höher integrierten Frameworks.

import java.time.Instant;

Instant.now().toEpochMilli(); //Long = 1450879900184
Instant.now().getEpochSecond(); //Long = 1450879900

Dies funktioniert in UTC, weil Instant.now()wirklich aufgerufen wirdClock.systemUTC().instant()

https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html

Przemek
quelle
16

Probiere auch System.currentTimeMillis()

Alexander Pawlow
quelle
0

Sie können es auch versuchen

  Calendar calendar = Calendar.getInstance();
  System.out.println(calendar.getTimeInMillis());

getTimeInMillis () - Die aktuelle Zeit in UTC-Millisekunden ab der Epoche

Hari Rao
quelle
2
Diese schreckliche Datums- / Uhrzeitklasse wurde vor Jahren durch die modernen Java.time- Klassen ersetzt, die durch JSR 310 definiert wurden. Siehe moderne Lösung in Antworten von Bystrup & Hack-R
Basil Bourque
Moderne Lösung mit java.time.Instantin dieser Antwort und dieser Antwort gesehen
Basil Bourque