Beachten Sie, ich möchte nicht Millis aus der Epoche. Ich möchte die Anzahl der Millisekunden, die derzeit auf der Uhr sind.
So habe ich zum Beispiel dieses Stück Code.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Gibt es eine Möglichkeit, Millisekunden mit Datum zu erhalten? Gibt es einen anderen Weg, dies zu tun?
Hinweis: System.currentTimeMillis()
Gibt mir Millis aus der Epoche, was nicht das ist, wonach ich suche.
java
date
time
milliseconds
Lemonio
quelle
quelle
[0, 999]
, richtig? @thinksteep las den letzten Satz.java.util.Date
jetzt Legacy sind , werden durch die Klassen java.time ersetzt .java.util.Date
jetzt Legacy sind , werden durch die Klassen java.time ersetzt . Siehe Tutorial von Oracle .Antworten:
Meinst du?
BTW Windows erlaubt keine Zeitreise bis 1969
quelle
c.get(Calendar.MILLISECOND)
nicht tun sollte. Denken Sie immer an die Eckkoffer!System.currentTimeMillis()
wird nicht von Zeitzonen beeinflusst.Kalender verwenden
oder
In der Praxis denke ich jedoch, dass es fast immer gleich System.currentTimeMillis ()% 1000 sein wird; es sei denn, jemand hat Schaltmillisekunden oder ein Kalender ist mit einer Epoche definiert, die nicht an einer zweiten Grenze liegt.
quelle
quelle
tl; dr
Sie fragen nach dem Bruchteil einer Sekunde der aktuellen Zeit als Anzahl von Millisekunden ( nicht ab Epoche gezählt).
Sehen Sie diesen Code live auf IdeOne.com .
Mit java.time
Der moderne Weg ist mit den java.time Klassen.
Erfassen Sie den aktuellen Moment in UTC.
Verwenden Sie die
Instant.get
Methode, um den Wert von a abzufragenTemporalField
. In unserem Fall ist das, wasTemporalField
wir wollenChronoField.MILLI_OF_SECOND
.Oder rechnen Sie selbst.
Wahrscheinlicher ist, dass Sie dies nach einer bestimmten Zeitzone fragen. Der Bruchteil einer Sekunde ist wahrscheinlich der gleiche wie bei,
Instant
aber es gibt so viele Anomalien mit Zeitzonen, dass ich zögere, diese Annahme zu treffen.Fragen Sie für den Bruchteil einer Sekunde ab. Die Frage wurde nach Millisekunden gestellt , aber Java.time-Klassen verwenden eine feinere Auflösung von Nanosekunden . Das bedeutet, dass die Anzahl der Nanosekunden zwischen 0 und 999.999.999 liegt.
Wenn Sie wirklich Millisekunden wollen, schneiden Sie die feineren Daten durch Teilen durch eine Million ab. Eine halbe Sekunde beträgt beispielsweise 500.000.000 Nanosekunden und 500 Millisekunden.
Ü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 .
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
Ich habe oben einige ausprobiert, aber sie scheinen @ 1000 zurückzusetzen
Dieser funktioniert definitiv und sollte auch das Jahr berücksichtigen
und machen Sie dasselbe bei Bedarf für die Endzeit.
quelle
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
quelle
Joda-Zeit
Ich denke, Sie können Joda-Time verwenden , um dies zu tun. Schauen Sie sich die
DateTime
Klasse und ihregetMillisOfSecond
Methode an. Etwas wiequelle
getMillis()
hat geschützten Zugriff"; müssenget()
stattdessen verwenden. Beachten Sie auch, dassnew DateTime(new Date())
dies dem einfachen Schreiben entsprichtnew DateTime()
.millisOfSecond
greift auf ein Objekt zu und der weitere Aufruf zumget
Extrahieren eines Grundelementsint
aus diesem Objekt. Sie können die beiden Aufrufe mit der Convenience-Getter-Methode reduzierengetMillisOfSecond
. Joda-Time folgt diesem Muster für viele seiner Eigenschaften.In Java 8 können Sie dies einfach tun
quelle
Instant.now().toEpochMilli()
Ich habe den Test mit Java 8 durchgeführt. Es spielt keine Rolle, in welcher Reihenfolge der Builder immer 0 Millisekunden und die Konat zwischen 26 und 33 Millisekunden unter und Iteration einer 1000-Verkettung benötigt
Hoffe, es hilft, es mit Ihrer Idee zu versuchen
quelle
Java 8:
quelle
LocalDateTime
Klasse kann keinen Moment darstellen, da kein Konzept für Zeitzone oder Versatz von UTC vorliegt, und kann daher diese Zeitzonenprobleme nicht verfolgen.Sie können die Klasse java.util.Calendar verwenden, um die Zeit in Millisekunden abzurufen. Beispiel:
quelle