İki Java örnekleri tarih arasındaki farkı hesaplama
Java java kullanıyorum.açıklama.Scala sınıf tarih ve bir tarih karşılaştırmak istediğiniz nesne ve şimdiki zaman. GetTime kullanarak delta hesaplamak biliyorum():
(new java.util.Date()).getTime() - oldDate.getTime()
Ancak, bu sadece bir Uzun milisaniye temsil ile beni bırakır. Daha basit, daha güzel herhangi bir zaman delta almak için var mı?
CEVAP
Basit diff (lib olmadan)
/**
* Get a diff between two dates
* @param date1 the oldest date
* @param date2 the newest date
* @param timeUnit the unit in which you want the diff
* @return the diff value, in the provided unit
*/
public static long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
long diffInMillies = date2.getTime() - date1.getTime();
return timeUnit.convert(diffInMillies,TimeUnit.MILLISECONDS);
}
Ve sonra arayabilir misiniz:
getDateDiff(date1,date2,TimeUnit.MINUTES);
dakika biriminde 2 tarih diff almak için.
TimeUnit
java.util.concurrent.TimeUnit
, standart bir Java numaralama gün için nano gidiyor.
İnsan okunabilir diff (lib olmadan)
public static Map<TimeUnit,Long> computeDiff(Date date1, Date date2) {
long diffInMillies = date2.getTime() - date1.getTime();
List<TimeUnit> units = new ArrayList<TimeUnit>(EnumSet.allOf(TimeUnit.class));
Collections.reverse(units);
Map<TimeUnit,Long> result = new LinkedHashMap<TimeUnit,Long>();
long milliesRest = diffInMillies;
for ( TimeUnit unit : units ) {
long diff = unit.convert(milliesRest,TimeUnit.MILLISECONDS);
long diffInMilliesForUnit = unit.toMillis(diff);
milliesRest = milliesRest - diffInMilliesForUnit;
result.put(unit,diff);
}
return result;
}
Çıkış birimleri ile sipariş Map:{DAYS=1, HOURS=3, MINUTES=46, SECONDS=40, MILLISECONDS=0, MICROSECONDS=0, NANOSECONDS=0}
gibi bir şeydir.
Sadece kullanıcı dostu bir dize için o Haritayı değiştirmek zorunda.
Uyarı
Yukarıdaki kod snipets arasında 2 anları arasında basit bir fark hesaplamak. this post açıklandığı gibi ışığından bir geçiş sırasında sorunlara neden olabilir. Bu saat/eksik bir gün olabilir hiçbir zaman tarih arasındaki farkı hesaplamak anlamına gelir.
Bence tarihi fark biraz öznel, özellikle gündür. Olabilir:
24 saat sayısı geçen süre sayısı: 1. gün - gün = 1 gün = 24 saat
sayısı süre sayısı, gün ışığından yararlanma bakımı: 1. gün - gün = 1 = 24 saat (ama 0 Gün ve 23 olabilir gece yarısı saat ve Yaz Saati uygulama kullanarak)
sayısı sayısı
day switches
, yani 1 gün 1 gün 11 = 1 gün bile süre sadece 2h (veya 1h olur Ya, bir gün ışığından yararlanma :p)
Cevabımı tarih tanımına günlerde 1 eşleşme durumu fark ise geçerlidir
JodaTime
Eğer JodaTime kullanıyorsanız 2 anları (spittalfields'da millie'nin Readableİnstant destekli) diff ile tarihleri:
Interval interval = new Interval(oldInstant, new Instant());
Ama aynı zamanda Yerel tarihler/saatler için diff alabilirsiniz:
// returns 4 because of the leap year of 366 days
new Period(LocalDate.now(), LocalDate.now().plusDays(365*5), PeriodType.years()).getYears()
// this time it returns 5
new Period(LocalDate.now(), LocalDate.now().plusDays(365*5 1), PeriodType.years()).getYears()
// And you can also use these static methods
Years.yearsBetween(LocalDate.now(), LocalDate.now().plusDays(365*5)).getYears()
Java iki tarih arasındaki gün farkı?...
iki tarih arasındaki ay farkı hesaplam...
Nasıl PHP kullanarak iki tarih arasınd...
İki tarih (gün sayısı) arasındaki fark...
Çalıştırılabilir ve Çağrı arabirimleri...