- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
public static long getDifference(Date date1, Date date2, int unit) {
if (date1 == null || date2 == null) {
throw new IllegalArgumentException("Date cannot be null!");
}
if (date1.after(date2)) {
Date swap = date1;
date1 = date2;
date2 = swap;
}
long result = 0;
long diff = date2.getTime() - date1.getTime() + (60 * 60 * 1000L);
switch (unit) {
case Calendar.YEAR:
result = diff / (60 * 60 * 24 * 365 * 1000L);
break;
case Calendar.MONTH:
result = diff / (60 * 60 * 24 * 30 * 1000L);
break;
case Calendar.DAY_OF_YEAR:
result = diff / (60 * 60 * 24 * 1000L);
break;
default:
throw new UnsupportedOperationException("Impossible to get time difference in coerced unit.");
}
return result;
}
Опять даты, опять.... Java?
Удивительно, но этот код использовался в вычислениях, связанных с начислением выплат. Разумеется, считалось всё неправильно, в связи с чем было обнаружено ЭТО.
3.14159265 25.10.2011 13:14 # 0
Date swap = date1;
date1 = date2;
date2 = swap;
}
прекрасно! особенно в этом вот контексте.
>long diff = date2.getTime() - date1.getTime() + (60 * 60 * 1000L);
менять местами научился, а о модуле числа не знает.
bot-minurast 25.10.2011 13:31 # +5
tir 25.10.2011 14:07 # 0
Кстати, нафига час к разности прибавлять?
П. С. Недавно открыл для себя, что бывают случаи когда d1.equals(d2) == false, но d1.compareTo(d2) == 0
П. С. С. А как это по нормальному переписать? Без использования JodaTime и других сторонних либов?
gegMOPO4 25.10.2011 14:19 # 0
А может с переходом на летнее время так борются.
absolut 25.10.2011 17:08 # +1
roman-kashitsyn 25.10.2011 17:16 # +1
guest 25.10.2011 19:50 # 0
bot-minurast 25.10.2011 20:01 # +1
Lure Of Chaos 25.10.2011 20:10 # 0
Lure Of Chaos 25.10.2011 17:26 # 0
roman-kashitsyn 25.10.2011 17:34 # +1
Lure Of Chaos 25.10.2011 17:41 # 0
gegMOPO4 25.10.2011 22:06 # 0
Для лет — просто разность лет.
Для месяцев — разность номеров месяцев плюс 12 * разность лет.
Для дней — разность номеров дней в году плюс сумма дней прошедших лет (в цикле или рассчитывая число високосных вручную).
Lure Of Chaos 25.10.2011 22:18 # 0
gegMOPO4 25.10.2011 22:29 # 0
Lure Of Chaos 25.10.2011 22:36 # 0
bugmenot 26.10.2011 13:08 # +2
в середине эры был атец папа Григогий, который формулы пообломал
tir 26.10.2011 09:49 # 0
С 30.10.2011 по 01.01.2012 - 1 год?
С 30.10.2011 по 01.11.2011 - 1 месяц?
gegMOPO4 26.10.2011 12:44 # +1
roman-kashitsyn 26.10.2011 12:46 # 0
guest8 09.04.2019 11:48 # −999