İki Joda-Time DateTime arasındaki dakika cinsinden fark nasıl bulunur?


141

Aşağıda yazdığım yöntem:

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;
}

Şimdi benim yöntemden görebilirsiniz nesnede adlı bir Joda-Time DateTime nesnesi var datetimeve benim sonucumdan ben jodatime dönüştürmek bir zaman damgası alıyorum punchTime. Şimdi bu iki tarih arasındaki farkı öğrenmek istiyorum, bunu nasıl yapabilirim?



2
Ancak bu yalnızca DateTime nesneleriniz aynı TimeZone içindeyse çalışır.
Tiago

1
Days.daysBetween(d1, d2)arkadaşının komşusu
Shubham Chaudhary

Yanıtlar:


79

Bu, milisaniye cinsinden iki DateTime nesnesi arasındaki farkı elde etmenizi sağlar:

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

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

78
MadProgrammer'ın cevabı Kabul Edilmiş Cevap olmalıdır. Basit kullanımı dikkat edin Minutes.minutesBetween.
Basil Bourque

5
Hayır katılmıyorum, çok garip ve belirsiz: "Delme zamanı tarih zamanı arasındaki dakika dakika", "ikinci tarih milisaniye eksi ilk tarih milisaniye" den daha kötü
Jonathan Neufeld

4
Bu, gün ışığından tasarruf etmeyi hesaba katmaz.
Sander

454

Gibi bir şey...

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());

Hangi çıktılar

1
24
1440

veya

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

Muhtemelen peşinde olduğun şeyden daha fazla


Yukarıdakiler saat dilimlerini dikkate alıyor mu? Yoksa önce UTC / GMT'ye geçmeli miyim?
Doo Dah

@ DooDah Bu iyi bir soru, inanıyorum ki (JodaTime'ın kavramına sahip olduğu gibi LocalTime), ama test etmenizi ve görmenizi öneririm. Soru şu ki, ortaya çıkan değer hangi saat diliminde temsil edilir?
MadProgrammer

Bunu test edip çözeceğim. Benim için, sonuçtaki saat dilimi muhtemelen kodun çalıştığı sunucu olacaktır. Zamanlanmış bir kuyruk uyguluyorum ve başka bir saat dilimindeki bir tarihe dayalı olarak şimdiki ve gelecekteki bazı zaman arasındaki süreyi hesaplamak gerekir. Bulduğumu rapor edeceğim.
Doo Dah

2
Katılıyorum, bu seçilen cevap olmalı. Düzgün ve basit.
Sid

Sadece bir zaman farkı elde etmek için yeni bir Duration nesnesi oluşturmak hiç de hoş değil. Çok sayıda tarih / saat nesnesinde saat farkı yapmanız gerektiğini düşünün.
AndroidDev

7

Gibi bir şey...

Minutes.minutesBetween(getStart(), getEnd()).getMinutes();

Başlangıç ​​ve bitiş tarihi gerçekten çok
uzaksa

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

Pratikte bunun her zaman verilen cevapla aynı sonucu vereceğini düşünüyorum Duration. Ancak dakikalardan farklı bir zaman birimi için daha doğru olabilir. Örneğin, 2016/2/2 - 2017/2/1 arasında 365 gün vardır, ancak aslında 1 yıldan azdır ve kullanırsanız 0 yıla indirilmelidir PeriodType.years().

Teoride, artık saniyeler nedeniyle dakikalarca olabilir, ama Joda artık saniyeler desteklemiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.