取得日の差
2514 ワード
public class CalendarTest {
/**
*
* @param sdate1
* @param sdate2
* @param fmt
* @param tz
* @param (1: ,2: ,3: ,4: ,5: )
* */
public static int getDateDiff(String sdate1,String sdate2,String fmt,TimeZone tz,int type) {
SimpleDateFormat df = new SimpleDateFormat(fmt);
Date date1 = null;
Date date2 = null;
try {
date1 = df.parse(sdate1);
date2 = df.parse(sdate2);
} catch (ParseException pe) {
pe.printStackTrace();
}
Calendar cal1 = null;
Calendar cal2 = null;
if (tz == null) {
cal1 = Calendar.getInstance();
cal2 = Calendar.getInstance();
} else {
cal1 = Calendar.getInstance(tz);
cal2 = Calendar.getInstance(tz);
}
// different date might have different offset
cal1.setTime(date1);
long ldate1 =
date1.getTime()
+ cal1.get(Calendar.ZONE_OFFSET)
+ cal1.get(Calendar.DST_OFFSET);
cal2.setTime(date2);
long ldate2 =
date2.getTime()
+ cal2.get(Calendar.ZONE_OFFSET)
+ cal2.get(Calendar.DST_OFFSET);
// Use integer calculation, truncate the decimals
int hr1 = (int) (ldate1 / 3600000); //60*60*1000
int hr2 = (int) (ldate2 / 3600000);
int days1 = (int) hr1 / 24;
int days2 = (int) hr2 / 24;
int hourDiff = hr2 - hr1;
int dateDiff = days2 - days1;
int weekOffset =
(cal2.get(Calendar.DAY_OF_WEEK)
- cal1.get(Calendar.DAY_OF_WEEK))
< 0
? 1
: 0;
int weekDiff = dateDiff / 7 + weekOffset;
int yearDiff = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
int monthDiff =
yearDiff * 12
+ cal2.get(Calendar.MONTH)
- cal1.get(Calendar.MONTH);
switch (type) {
case 1 :
return dateDiff;
case 2 :
return weekDiff;
case 3 :
return monthDiff;
case 4 :
return yearDiff;
case 5 :
return hourDiff;
default :
return 0;
}
}
public static void main(String[] args){
System.out.println(getDateDiff("2010-03-22","2011-03-27","yyyy-MM-dd",null,1));
}
}