So finden Sie den Unterschied zwischen zwei Joda-Time DateTimes in Minuten


141

Unten ist die Methode, die ich geschrieben habe:

public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date,
        int transitionVal, String type, User user) {

    DateTime datetime = new DateTime(date);
    datetime = datetime
            .plus(Period.minutes(shiftTiming.getSession1InTime()));

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

    sql = SqlMapUtils.getSql("attendance.attendancestatus.latein",
            parameters);
    result = getJdbcTemplate().queryForList(sql);
    for (int i = 0; i < result.size(); i++) {
        Date punchInTime = (Date) result.get(i).get("punchtime");
        DateTime punchTime = new DateTime(punchInTime);
    }
    return result;
}

Aus meiner Methode können Sie nun ersehen, dass ich ein Joda-Time DateTime- Objekt im Objektnamen habe datetimeund aus meinem Ergebnis einen Zeitstempel erhalte, den ich in Jodatime konvertiere punchTime. Jetzt möchte ich den Unterschied zwischen diesen beiden Daten herausfinden. Wie mache ich das?



2
Dies funktioniert jedoch nur, wenn sich Ihre DateTime-Objekte in derselben Zeitzone befinden.
Tiago

1
Days.daysBetween(d1, d2)ist der Nachbar Ihres Freundes
Shubham Chaudhary

Antworten:


79

Dadurch erhalten Sie den Unterschied zwischen zwei DateTime-Objekten in Millisekunden:

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

long diffInMillis = d2.getMillis() - d1.getMillis();

78
Die Antwort von MadProgrammer sollte die akzeptierte Antwort gewesen sein. Beachten Sie die einfache Verwendung von Minutes.minutesBetween.
Basil Bourque

5
Nein, ich bin anderer Meinung, es ist zu wortreich und unklar: "Die Minuten Minuten zwischen Punch Time Date Time" sind schlechter als "Millisekunden des zweiten Datums minus Millisekunden des ersten Datums"
Jonathan Neufeld,

4
Dies wird die Sommerzeit nicht berücksichtigen.
Sander Versluys

454

Etwas wie...

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());

Welche Ausgänge

1
24
1440

oder

System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());

Welches ist wahrscheinlich mehr, was Sie suchen


Berücksichtigt das oben Gesagte Zeitzonen? Oder sollte ich zuerst auf UTC / GMT konvertieren?
Doo Dah

@DooDah Das ist eine gute Frage, ich "glaube", dass dies der Fall ist (wie JodaTime das Konzept hat LocalTime), aber ich würde vorschlagen, dass Sie es testen und sehen. Die Frage wäre jedoch, in welcher Zeitzone der resultierende Wert dargestellt würde.
MadProgrammer

Ich werde das testen und herausfinden. Für mich ist die resultierende Zeitzone wahrscheinlich der Server, auf dem der Code ausgeführt wird. Ich implementiere eine geplante Warteschlange und muss die Zeitspanne zwischen jetzt und einer zukünftigen Zeit basierend auf einem Datum aus einer anderen Zeitzone berechnen. Ich werde zurückmelden, was ich finde.
Doo Dah

2
Ich stimme zu, dies hätte die ausgewählte Antwort sein sollen. Es ist ordentlich und einfach.
Sid

Das Erstellen eines neuen Duration-Objekts, um einen Zeitunterschied zu erzielen, ist einfach nicht cool. Stellen Sie sich vor, Sie müssen einen Zeitunterschied für eine große Anzahl von Datums- / Zeitobjekten durchführen.
AndroidDev


3
DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();

In der Praxis denke ich, dass dies immer das gleiche Ergebnis liefert wie die Antwort basierend auf Duration. Für eine andere Zeiteinheit als Minuten ist dies jedoch möglicherweise korrekter. Zum Beispiel gibt es 365 Tage von 2016/2/2 bis 2017/2/1, aber tatsächlich ist es weniger als 1 Jahr und sollte auf 0 Jahre gekürzt werden, wenn Sie verwenden PeriodType.years().

Theoretisch könnte dasselbe aufgrund von Schaltsekunden für Minuten passieren, aber Joda unterstützt keine Schaltsekunden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.