Wie kann ich die Anzahl der Millisekunden, die seit Mitternacht für den aktuellen?
Hinweis, ich möchte NICHT, millis von der Epoche. Ich möchte die Anzahl der Millisekunden, die derzeit auf der Uhr.
Also zum Beispiel, ich habe dieses Stück code.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Gibt es einen Weg, um Millisekunden mit Datum?
Gibt es einen anderen Weg, dies zu tun?
Hinweis: System.currentTimeMillis()
gibt mir die millis aus Epoche, die nicht ist, was ich Suche.
- Du meinst, "Millisekunden in der zweiten," so ist der Wert immer im Intervall
[0, 999]
, richtig? @thinksteep Lesen Sie den letzten Satz. - Geben Sie ein Beispiel würde die Frage klar.
- FYI, ist die lästige alte Datum-Zeit-Klassen wie
java.util.Date
nun legacy, überlagert von der java.Zeit Klassen. - FYI, ist die lästige alte Datum-Zeit-Klassen wie
java.util.Date
nun legacy, überlagert von der java.Zeit Klassen. Siehe Tutorial von Oracle. - Bourque Quelle?
- JEP 150 unterstützt von Brian Goetz, JSR 310 einstimmig, ein Fachartikel veröffentlicht von Oracle, sowie die Ersetzung von alten Datum-Zeit-Oracle-Tutorial mit neuen java.Zeit Tutorial.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meinst du?
BTW Windows nicht erlauben timetravel bis 1969
c.get(Calendar.MILLISECOND)
sollte nicht. Denke immer an die Ecke Fälle!System.currentTimeMillis()
ist nicht betroffen von Zeitzonen.Kalender
oder
In der Praxis, obwohl ich denke, es wird fast immer das gleiche System.currentTimeMillis()%1000; es sei denn, jemand hat Sprung-Millisekunden oder einige Kalender definiert ist, mit einer Epoche, nicht auf ein zweiten Grenze.
Habe ich versucht, ein paar oben, aber Sie scheinen reset @ 1000
Diese eine auf jeden Fall funktioniert, und sollte auch Jahr berücksichtigt
und dann tun Sie das gleiche für das Ende der Zeit, wenn nötig.
tl;dr
Fragen Sie für den Bruchteil einer Sekunde die aktuelle Zeit als Anzahl von Millisekunden (nicht Graf Zahl aus der Epoche).
Sehen diese code ausführen, live auf IdeOne.com.
Mit java.Zeit
Die moderne Art, die mit der java.Zeit-Klassen.
Erfassen, den gegenwärtigen moment in UTC.
Verwenden Sie die
Instant.get
Methode zu befragen, die für den Wert einerTemporalField
. In unserem Fall, dieTemporalField
wir wollen, istChronoField.MILLI_OF_SECOND
.Oder tun die Mathematik selbst.
Mehr wahrscheinlich, Sie werden diese Frage, die für eine spezifische Zeitzone. Den Bruchteil einer Sekunde ist wahrscheinlich das gleiche wie mit
Instant
aber es gibt so viele Anomalien, die mit Zeitzonen, zögere ich zu dieser Annahme ausgehen.Befragen, für die in Sekundenbruchteilen. Die Frage für Millisekunden, aber java.Zeit-Klassen verwenden eine feinere Auflösung Nanosekunden. Das bedeutet, dass die Anzahl der Nanosekunden-Bereich von 0 bis 999.999.999 ein.
Wenn Sie wirklich wollen, Millisekunden, kürzen Sie die feineren Daten durch dividieren durch eine million. Zum Beispiel, eine halbe Sekunde ist 500,000,000 Nanosekunden und ist auch 500 Millisekunden.
Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
Joda-Time
Ich denke, dass Sie verwenden können,Joda-Time, dies zu tun. Werfen Sie einen Blick auf die
DateTime
Klasse und IhregetMillisOfSecond
Methode. So etwas wiegetMillis()
hat geschützten Zugriff"; verwenden müssenget()
statt. Beachten Sie auch, dassnew DateTime(new Date())
ist äquivalent zu schreiben einfachnew DateTime()
.millisOfSecond
auf ein Objekt zugreifen und die weiteren Aufrufget
Extrakte eine primitiveint
Objekt. Können Sie reduzieren die zwei Anrufe mit dem convenience getter-MethodegetMillisOfSecond
. Joda-Time, folgt diesem Muster für viele seiner Eigenschaften.In Java 8 Sie können einfach tun
Instant.now().toEpochMilli()
Ich habe den test mit java 8
Es wird nicht egal, die Reihenfolge der builder nimmt immer 0 Millisekunden angegeben und der concat zwischen 26 und 33 Millisekunden unter und iteration von 1000 Verkettung
Hoffe, es hilft, versuchen Sie es mit Ihrem ide -