Berechnen Sie den Datums-/Zeitunterschied in Java [duplicate]

Lesezeit: 5 Minuten

Berechnen Sie den Datums Zeitunterschied in Java duplicate
London

Ich möchte Differenz zwischen 2 Daten berechnen in Stunden/Minuten/Sekunden.

Ich habe ein kleines Problem mit meinem Code hier ist es:

String dateStart = "11/03/14 09:29:58";
String dateStop = "11/03/14 09:33:43";

// Custom date format
SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");  

Date d1 = null;
Date d2 = null;
try {
    d1 = format.parse(dateStart);
    d2 = format.parse(dateStop);
} catch (ParseException e) {
    e.printStackTrace();
}    

// Get msec from each, and subtract.
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000;         
long diffMinutes = diff / (60 * 1000);         
long diffHours = diff / (60 * 60 * 1000);                      
System.out.println("Time in seconds: " + diffSeconds + " seconds.");         
System.out.println("Time in minutes: " + diffMinutes + " minutes.");         
System.out.println("Time in hours: " + diffHours + " hours."); 

Dies sollte produzieren:

Time in seconds: 45 seconds.
Time in minutes: 3 minutes.
Time in hours: 0 hours.

Allerdings bekomme ich dieses Ergebnis:

Time in seconds: 225 seconds.
Time in minutes: 3 minutes.
Time in hours: 0 hours.

Kann jemand sehen, was ich hier falsch mache?

  • Eine ähnliche Frage gefunden: stackoverflow.com/questions/625433/…

    – Yves Martin

    7. Februar 2012 um 13:43 Uhr

  • Es gibt einen besseren Weg, dies zu tun: stackoverflow.com/a/15541322/562769

    – Martin Thoma

    21. März 2013 um 7:52 Uhr

  • Für Java 8+ gibt es einen wirklich einfachen Weg: stackoverflow.com/a/23176621/1548776

    – ᴠɪɴᴄᴇɴᴛ

    7. August 2018 um 15:09 Uhr

Ich würde es vorziehen, vorgeschlagen zu verwenden java.util.concurrent.TimeUnit Klasse.

long diff = d2.getTime() - d1.getTime();//as given

long seconds = TimeUnit.MILLISECONDS.toSeconds(diff);
long minutes = TimeUnit.MILLISECONDS.toMinutes(diff); 

  • @Mark Ich stimme nicht zu. Sie haben den Punkt der Frage verfehlt. Trotz der Tatsache, dass er im Rest des Beitrags den Ausdruck “Zeit in Sekunden” verwendet, macht er deutlich, dass er eigentlich keine einfache Konvertierung will, sondern Reste. Dies ist weniger effizient als die akzeptierte Antwort (unter Verwendung eines Methodenaufrufs, der selbst im JVM-Bytecode aus einigen Anweisungen besteht), weniger klar (es ist länger und ehrlich gesagt, wenn etwas “1000” oder “60” in diesem Kontext als magische Zahlen findet , sie arbeiten nicht mit einem vollen Deck) und entscheidend ist, dass es nicht das tut, was das OP wollte.

    – Partherschuss

    8. August 2014 um 17:25 Uhr

  • Es gibt eine Möglichkeit, eine generische Methode dafür zu schreiben. Siehe stackoverflow.com/a/10650881/82609

    – Sebastian Lorber

    29. Januar 2016 um 10:20 Uhr

  • wenn ich will, unterschied für wochen, monate, jahre?

    – jose920405

    15. September 2016 um 16:51 Uhr

  • @ jose920405 in diesem Fall brauchst du Joda-Zeit

    – Johann Henckel

    29. Juni 2017 um 21:13 Uhr

  • Dies gibt die Antwort, die das OP angegeben hat, dass es nicht möchte.

    – Peter Lawrey

    3. November 2018 um 15:33 Uhr

1646317629 112 Berechnen Sie den Datums Zeitunterschied in Java duplicate
Peter Lawrey

Versuchen

long diffSeconds = diff / 1000 % 60;  
long diffMinutes = diff / (60 * 1000) % 60; 
long diffHours = diff / (60 * 60 * 1000);

HINWEIS: Dies setzt voraus diff ist nicht negativ.

  • @vels4j Ich habe die dritte Zeile aus dem Originalcode angenommen, den ich gerade hinzugefügt habe. Vielen Dank für den Hinweis.

    – Peter Lawrey

    3. November 2018 um 11:43 Uhr


  • aber immer noch die diffMinutes ist falsch

    – vels4j

    3. November 2018 um 12:10 Uhr

  • @vels4j auf welche Weise?

    – Peter Lawrey

    3. November 2018 um 15:32 Uhr

  • Ich habe die Antwort aktualisiert, bitte überprüfen Sie sie. verwerfen Sie meine Bearbeitung nach der Klärung

    – vels4j

    8. November 2018 um 6:05 Uhr

  • @vels4j, was sagen Sie, ist falsch, weil 6 die richtige Antwort zu sein scheint, da Sie auch Stunden in der OP-Frage haben.

    – Peter Lawrey

    8. November 2018 um 9:47 Uhr

1646317629 961 Berechnen Sie den Datums Zeitunterschied in Java duplicate
gehalten

Wenn Sie in der Lage sind, externe Bibliotheken zu verwenden, würde ich Ihnen die Verwendung empfehlen Joda-Zeitbemerken, dass:

Joda-Time ist die De-facto-Standard-Datums- und Zeitbibliothek für Java vor Java SE 8. Benutzer werden jetzt aufgefordert, auf java.time (JSR-310) zu migrieren.

Beispiel für Zwischenrechnung:

Seconds.between(startDate, endDate);
Days.between(startDate, endDate);

  • Bitte beachten Sie, dass Sie Days.daysBetween(LocalDate.fromDateFields(startDate), LocalDate.fromDateFields(endDate)) verwenden müssen, wenn Sie mit 2 java.util.Date-Objekten arbeiten.

    – Benutzer799188

    9. Oktober 2012 um 3:00 Uhr


  • Ich habe ein Beispiel für die Verwendung der Joda-Zeit erstellt: stackoverflow.com/a/15541322/562769

    – Martin Thoma

    21. März 2013 um 7:53 Uhr

  • Was ist der aktuelle Weg, es zu tun? (mit JSR-310)

    – static_rtti

    29. März 2018 um 10:27 Uhr

Berechnen Sie den Datums Zeitunterschied in Java duplicate
Yves Martin

Seit Java 5 können Sie verwenden java.util.concurrent.TimeUnit um die Verwendung von magischen Zahlen wie 1000 und 60 in Ihrem Code zu vermeiden.

Übrigens sollten Sie bei Ihrer Berechnung auf Schaltsekunden achten: Die letzte Minute eines Jahres kann eine zusätzliche Schaltsekunde haben, sodass sie tatsächlich 61 Sekunden statt der erwarteten 60 Sekunden dauert. Die ISO-Spezifikation sieht sogar eventuell 61 Sekunden vor. Einzelheiten finden Sie in java.util.Date javadoc.

Berechnen Sie den Datums Zeitunterschied in Java duplicate
Yogev

Versuchen Sie dies für eine freundliche Darstellung von Zeitunterschieden (in Millisekunden):

String friendlyTimeDiff(long timeDifferenceMilliseconds) {
    long diffSeconds = timeDifferenceMilliseconds / 1000;
    long diffMinutes = timeDifferenceMilliseconds / (60 * 1000);
    long diffHours = timeDifferenceMilliseconds / (60 * 60 * 1000);
    long diffDays = timeDifferenceMilliseconds / (60 * 60 * 1000 * 24);
    long diffWeeks = timeDifferenceMilliseconds / (60 * 60 * 1000 * 24 * 7);
    long diffMonths = (long) (timeDifferenceMilliseconds / (60 * 60 * 1000 * 24 * 30.41666666));
    long diffYears = timeDifferenceMilliseconds / ((long)60 * 60 * 1000 * 24 * 365);

    if (diffSeconds < 1) {
        return "less than a second";
    } else if (diffMinutes < 1) {
        return diffSeconds + " seconds";
    } else if (diffHours < 1) {
        return diffMinutes + " minutes";
    } else if (diffDays < 1) {
        return diffHours + " hours";
    } else if (diffWeeks < 1) {
        return diffDays + " days";
    } else if (diffMonths < 1) {
        return diffWeeks + " weeks";
    } else if (diffYears < 1) {
        return diffMonths + " months";
    } else {
        return diffYears + " years";
    }
}

  • on line long diffYears = (long) (timeDifferenceMillisekunden / (60 * 60 * 1000 * 24 * 365)); Sie müssen wenig später lang umwandeln, sonst ist der Divisor int und überläuft :diffYears = (timeDifferenceMilliseconds / ((long)60 * 60 * 1000 * 24 * 365));

    – Pavel Niedoba

    14. April 2016 um 13:38 Uhr

  • Ich habe den Code bereits korrigiert

    – Pavel Niedoba

    14. April 2016 um 14:13 Uhr

1646317631 409 Berechnen Sie den Datums Zeitunterschied in Java duplicate
Joeri Hendrickx

Dies ist im Grunde eher ein mathematisches Problem als ein Java-Problem.

Das Ergebnis, das Sie erhalten, ist korrekt. Dies liegt daran, dass 225 Sekunden 3 Minuten sind (bei einer ganzzahligen Division). Was Sie wollen, ist dies:

  • Teilen Sie durch 1000, um die Anzahl der Sekunden zu erhalten -> Rest ist Millisekunden
  • Teilen Sie das durch 60, um die Anzahl der Minuten zu erhalten -> Rest sind Sekunden
  • Teilen Sie das durch 60, um die Anzahl der Stunden zu erhalten -> Rest sind Minuten

oder Java:

int millis = diff % 1000;
diff/=1000;
int seconds = diff % 60;
diff/=60;
int minutes = diff % 60;
diff/=60;
hours = diff;

  • on line long diffYears = (long) (timeDifferenceMillisekunden / (60 * 60 * 1000 * 24 * 365)); Sie müssen wenig später lang umwandeln, sonst ist der Divisor int und überläuft :diffYears = (timeDifferenceMilliseconds / ((long)60 * 60 * 1000 * 24 * 365));

    – Pavel Niedoba

    14. April 2016 um 13:38 Uhr

  • Ich habe den Code bereits korrigiert

    – Pavel Niedoba

    14. April 2016 um 14:13 Uhr

1646317631 417 Berechnen Sie den Datums Zeitunterschied in Java duplicate
José Tepedino

Hier ist ein Vorschlag, mit TimeUnitum jedes Mal einen Teil zu erhalten und sie zu formatieren.

private static String formatDuration(long duration) {
    long hours = TimeUnit.MILLISECONDS.toHours(duration);
    long minutes = TimeUnit.MILLISECONDS.toMinutes(duration) % 60;
    long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) % 60;
    long milliseconds = duration % 1000;
    return String.format("%02d:%02d:%02d,%03d", hours, minutes, seconds, milliseconds);
}

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss,SSS");
Date startTime = sdf.parse("01:00:22,427");
Date now = sdf.parse("02:06:38,355");
long duration = now.getTime() - startTime.getTime();
System.out.println(formatDuration(duration));

Das Ergebnis ist: 01:06:15,928

924310cookie-checkBerechnen Sie den Datums-/Zeitunterschied in Java [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy