Ich möchte zwei Zeiträume von 16:00:00 von 19:00:00 subtrahieren. Gibt es dafür eine Java-Funktion? Die Ergebnisse können in Millisekunden, Sekunden oder Minuten angegeben werden.
was ist mit dem anderen Weg? 16:00 - 19:00? Wie kann ich das berechnen?
Alex Kapustian
Das Invertieren der Variablen bringt nicht viel. In diesem Beispiel können Sie sie natürlich invertieren und den absoluten Wert oder etwas anderes annehmen. Aber was passiert, wenn Sie Mitternacht haben (00:00)?
rj2700
Was ist mit 23:15:00 - 01:15:00?
Oleksandr
Was ist mit dem Unterschied zwischen 08:00:00 heute und gestern 10:00:00 ??????? Ich glaube nicht, dass Sie eine zerbrechliche Logik vorgeschlagen haben.
Ihre Antwort hat mir sehr gut gefallen. Sehr elegant! :)
Avinash
Das läuft also auf zwei Importe hinaus und System.out.println("Duration: " + String.valueOf(Duration.between(outerstart, Instant.now()).toMillis()));um die Dauer zu protokollieren. Ich würde das nicht als eine schöne und saubere Lösung in Java8 bezeichnen, wenn andere Sprachen dies mit Code wie print("Duration: " + str(time.time()-start))... tun könnten
Luc
3
@ Luc Sauberkeit ist nicht gleich Kürze. Es ist viel klarer, was genau in der Java 8-Version passiert, und es ist auch viel einfacher zu optimieren, wenn Sie beispielsweise die Dauer zwischen zwei Zeitpunkten in einer anderen Einheit als Millisekunden oder als mehrere Einheiten (z. B. 1h 15m 3.022sanstelle von 4503022 milliseconds) angeben möchten. .
JakeRobb
39
Um dann ziemlich zeitliche Unterschiede zu bekommen
Genau wie jede andere Sprache; Konvertieren Sie Ihre Zeiträume in einen Unix-Zeitstempel (dh Sekunden seit der Unix-Epoche) und subtrahieren Sie dann einfach. Die resultierenden Sekunden sollten dann als neuer Unix-Zeitstempel verwendet und in einem beliebigen Format formatiert gelesen werden.
Ah, gib dem obigen Poster (Genesiss) seine gebührende Anerkennung, Code ist immer griffbereit;) Allerdings hast du jetzt auch eine Erklärung :)
import java.util.Date;...Date d1 =newDate();......Date d2 =newDate();System.out.println(d2.getTime()-d1.getTime());//gives the time difference in milliseconds. System.out.println((d2.getTime()-d1.getTime())/1000);//gives the time difference in seconds.
und um in einem schöneren Format zu zeigen, können Sie verwenden:
Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill
@ DavidPostill, danke für deine Köpfe hoch. Aber die Lösung, die ich selbst brauchte und im Beitrag von GENESIS nicht gefunden habe, war der Zeitunterschied zwischen der Ausführung von zwei Codezeilen (wie dem Start- und Endpunkt des Programms oder vor und nach dem Ausführen einer Methode, nicht einige statische Zeiten). . Ich dachte, das könnte helfen.
Alisa
2
Der schmerzhafte Weg besteht darin, in Millis zu konvertieren und die Subtraktion durchzuführen und dann zu den gewünschten Sekunden zurückzukehren. Der bessere Weg ist, JodaTime zu verwenden .
Ich habe nie Unix-Zeitstempel erwähnt. Es ist auch eine bekannte Tatsache, dass die Java-API für Datum und Uhrzeit mehr als nur gelegentlich verwendet wird. JodaTime ist viel besser und wahrscheinlich der richtige Weg, bis JSR 310 Teil von Java ist. sourceforge.net/apps/mediawiki/threeten/…
Manfred Moser
@Manfred Moser: Vielleicht sollten Sie ... Sowohl die Standard-Java-Zeitklassen als auch Joda geben eine Zeit in Millis an, die von der sogenannten Unix- Epoche ausgeht . Zu diesem Zeitpunkt kommen sie den Unix- Zeitstempeln verdammt nahe (einer in Millis, der andere in Sekunden). In jedem Fall kann das, was das OP will, trivial mit den Standard-Java-Klassen durchgeführt werden, wobei die Anzahl der Millis seit der Unix- Epoche genommen und subtrahiert wird.
SyntaxT3rr0r
1
Sicher kann es trivial gemacht werden. Und wenn Sie in Ihrer App viele Datums- und Zeitberechnungen durchführen, können Sie auch trivial viele Fehler selbst erstellen und Ihre eigene kleine Bibliothek neu erfinden, indem Sie Teile von JodaTime erneut selbst implementieren. Für eine einfache Berechnung, die vielleicht in Ordnung ist, aber für den häufigen Gebrauch lohnt es sich, eine anständige Bibliothek zu verwenden. Ich versuche nur darauf hinzuweisen, dass die erste einfache Lösung Sie möglicherweise nicht auf den besten Weg führt. Was stimmt damit nicht?
Manfred Moser
3
@Manfred Moser: Eigentlich ist die erste einfache Lösung ist der richtige Weg, wenn man bedenkt das OP für die Differenz zwischen zwei Zeitperioden gefragt, ändert sich nicht in einer Atomuhr :)
Christian
Sicher .. nur für dieses Beispiel und eine bestimmte Frage. Nicht für das Gesamtbild.
Neben dem gängigsten Ansatz für Perioden- und Dauerobjekte können Sie Ihr Wissen auf eine andere Art und Weise erweitern, um mit der Zeit in Java umzugehen.
Erweiterte Java 8-Bibliotheken.
ChronoUnit für Unterschiede.
ChronoUnit ist eine gute Möglichkeit, um festzustellen, wie weit zwei zeitliche Werte voneinander entfernt sind. Temporal umfasst LocalDate , LocalTime usw.
LocalTime one =LocalTime.of(5,15);LocalTime two =LocalTime.of(6,30);LocalDate date =LocalDate.of(2019,1,29);System.out.println(ChronoUnit.HOURS.between(one, two));//1System.out.println(ChronoUnit.MINUTES.between(one, two));//75System.out.println(ChronoUnit.MINUTES.between(one, date));//DateTimeException
Das erste Beispiel zeigt, dass zwischen Kürzungen und nicht zwischen Runden.
Die zweite zeigt, wie einfach es ist, verschiedene Einheiten zu zählen.
Und das letzte Beispiel erinnert uns daran, dass wir in Java nicht mit Datum und Uhrzeit verwechseln sollten :)
Date start =newDate();//Waiting for 10 secondsThread.sleep(10000);Date end =newDate();long diff = end.getTime()- start.getTime();StringTimeTaken=String.format("[%s] hours : [%s] mins : [%s] secs",Long.toString(TimeUnit.MILLISECONDS.toHours(diff)),TimeUnit.MILLISECONDS.toMinutes(diff),TimeUnit.MILLISECONDS.toSeconds(diff));System.out.println(String.format("Time taken %s",TimeTaken));
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Antworten:
Der Unterschied wird in Millisekunden angegeben.
Ich habe sfaizs post geändert .
quelle
Java 8 hat eine sauberere Lösung - Sofort und Dauer
Beispiel:
quelle
System.out.println("Duration: " + String.valueOf(Duration.between(outerstart, Instant.now()).toMillis()));
um die Dauer zu protokollieren. Ich würde das nicht als eine schöne und saubere Lösung in Java8 bezeichnen, wenn andere Sprachen dies mit Code wieprint("Duration: " + str(time.time()-start))
... tun könnten1h 15m 3.022s
anstelle von4503022 milliseconds
) angeben möchten. .Um dann ziemlich zeitliche Unterschiede zu bekommen
quelle
Java 8
quelle
Genau wie jede andere Sprache; Konvertieren Sie Ihre Zeiträume in einen Unix-Zeitstempel (dh Sekunden seit der Unix-Epoche) und subtrahieren Sie dann einfach. Die resultierenden Sekunden sollten dann als neuer Unix-Zeitstempel verwendet und in einem beliebigen Format formatiert gelesen werden.
Ah, gib dem obigen Poster (Genesiss) seine gebührende Anerkennung, Code ist immer griffbereit;) Allerdings hast du jetzt auch eine Erklärung :)
quelle
und um in einem schöneren Format zu zeigen, können Sie verwenden:
quelle
Der schmerzhafte Weg besteht darin, in Millis zu konvertieren und die Subtraktion durchzuführen und dann zu den gewünschten Sekunden zurückzukehren. Der bessere Weg ist, JodaTime zu verwenden .
quelle
löst eine Ausnahme aus, die Ausnahmen analysiert
quelle
Neben dem gängigsten Ansatz für Perioden- und Dauerobjekte können Sie Ihr Wissen auf eine andere Art und Weise erweitern, um mit der Zeit in Java umzugehen.
Erweiterte Java 8-Bibliotheken. ChronoUnit für Unterschiede.
ChronoUnit ist eine gute Möglichkeit, um festzustellen, wie weit zwei zeitliche Werte voneinander entfernt sind. Temporal umfasst LocalDate , LocalTime usw.
Das erste Beispiel zeigt, dass zwischen Kürzungen und nicht zwischen Runden.
Die zweite zeigt, wie einfach es ist, verschiedene Einheiten zu zählen.
Und das letzte Beispiel erinnert uns daran, dass wir in Java nicht mit Datum und Uhrzeit verwechseln sollten :)
quelle
Alternative Option, wenn Zeit von verschiedenen Tagen genommen wird, zum Beispiel: 22:00 und 01:55.
quelle
Jetzt haben Minuten die richtige Dauer zwischen zwei Zeitpunkten (in Minuten).
quelle
}}
quelle
quelle
Ich fand das sauberer.
quelle
quelle
Klasse TimeCalculator {String updateTime;
quelle
Versuche dies:
quelle