/**
* calculate calendar different
*
* return value List\<Integer\> includes 4 element.
* element 0: 0, positive or negative
* element 1: year
* element 2: month
* element 3: day
*
* @param now
* @param cal
* @return
*/
public static List<Integer> calDateDiff(Calendar now, Calendar cal) {
now.set(Calendar.HOUR, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
//
boolean reverse = false;
if(now.before(cal)) {
reverse = true;
Calendar temp = now;
now = cal;
cal = temp;
} else if(now.after(cal)) {
} else {
List<Integer> result = new ArrayList<Integer>(4);
result.add(0);
result.add(0);
result.add(0);
result.add(0);
}
int year = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) - cal.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH) - cal.get(Calendar.DAY_OF_MONTH);
if(year == 0) {
if(month > 0) {
if (day < 0) {
month -= 1;
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(cal.getTime());
day = tempCal.getActualMaximum(Calendar.DAY_OF_MONTH)
- tempCal.get(Calendar.DAY_OF_MONTH)
+ now.get(Calendar.DAY_OF_MONTH);
}
}
} else if(year > 0) {
if(month == 0) {
if(day < 0) {
year--;
month = 11;
//
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(cal.getTime());
day = tempCal
.getActualMaximum(Calendar.DAY_OF_MONTH)
- tempCal.get(Calendar.DAY_OF_MONTH)
+ now.get(Calendar.DAY_OF_MONTH);
}
} else if(month > 0) {
if(day < 0) {
month--;
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(cal.getTime());
day = tempCal
.getActualMaximum(Calendar.DAY_OF_MONTH)
- tempCal.get(Calendar.DAY_OF_MONTH)
+ now.get(Calendar.DAY_OF_MONTH);
}
} else {
year--;
month = 11 - cal.get(Calendar.MONTH) + now.get(Calendar.MONTH) + 1;
if(day < 0) {
month--;
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(cal.getTime());
day = tempCal
.getActualMaximum(Calendar.DAY_OF_MONTH)
- tempCal.get(Calendar.DAY_OF_MONTH)
+ now.get(Calendar.DAY_OF_MONTH);
}
}
}
List<Integer> result = new ArrayList<Integer>(4);
result.add(reverse?-1:1);
result.add(year);
result.add(month);
result.add(day);
return result;
}
|