Wie berechnet man Datum und Zeit in Java?

time-date-different-in-Java

In diesem Tutorial zeigen wir Ihnen zwei Beispiele zur Berechnung des Datums-/Zeitunterschieds in Java:

  1. Manuelle Zeitberechnung

  2. Joda-Zeitbibliothek.

1. Manuelle Zeitberechnung

Konvertiert Date in Millisekunden (ms) und berechnet die Differenzen zwischen zwei Datumsangaben mit den folgenden Regeln:

1000 milliseconds = 1 second
60 seconds = 1 minute
60 minutes = 1 hour
24 hours = 1 day

DateDifferentExample.java

package com.mkyong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

    public static void main(String[]args) {

        String dateStart = "01/14/2012 09:29:58";
        String dateStop = "01/15/2012 10:31:48";

       //HH converts hour in 24 hours format (0-23), day calculation
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        Date d1 = null;
        Date d2 = null;

        try {
            d1 = format.parse(dateStart);
            d2 = format.parse(dateStop);

           //in milliseconds
            long diff = d2.getTime() - d1.getTime();

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

            System.out.print(diffDays + " days, ");
            System.out.print(diffHours + " hours, ");
            System.out.print(diffMinutes + " minutes, ");
            System.out.print(diffSeconds + " seconds.");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Ergebnis

1 days, 1 hours, 1 minutes, 50 seconds.

Wenn Sie es in ändern

long diffSeconds = diff/1000;

Das Ergebnis wird sein

1 days, 1 hours, 1 minutes, 90110 seconds.

"90110" ist die Gesamtzahl der Sekunden, die zwischen "Datum1" und "Datum2" liegen. Dies ist richtig, wenn Sie NUR die Unterschiede in Sekunden erfahren möchten.

Um die Differenz im Format " Tag, Stunde, Minute und Sekunde " anzuzeigen, sollten Sie einen Modulus (% 60) verwenden, um die restlichen Sekunden ('90060') abzuschneiden. Ich habs? Die Idee wird auch in Minuten (% 60) und Stunden (% 24) angewendet.

90110 % 60 = 50 seconds (you want this)
90110 - 50 = 90060 seconds (you dont want this)

2. Joda Time Beispiel

Hier ist das äquivalente Beispiel, aber die Joda-Zeit wird verwendet, um Unterschiede zwischen zwei Datumsangaben zu berechnen.

P.S Dieses Beispiel verwendet joda-time-2.1.jar

JodaDateDifferentExample.java

package com.mkyong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Seconds;

public class JodaDateDifferentExample {

  public static void main(String[]args) {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        DateTime dt1 = new DateTime(d1);
        DateTime dt2 = new DateTime(d2);

        System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
        System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
        System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
        System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");

     } catch (Exception e) {
        e.printStackTrace();
     }

  }

}

Ergebnis

1 days, 1 hours, 1 minutes, 50 seconds.

Kommentieren Sie unten, wenn Sie alternative Wege haben :)