Java計算兩個日期間的年,月,日之差
阿新 • • 發佈:2019-02-08
由於在開發中需要計算車的使用年限,我當時使用的是以下方案並記錄下來,希望能給有需要計算日期差的朋友有所幫助。當然,中間的計算邏輯根據不同要求來計算。
有錯的地方請留言告知
/**
* 計算使用年限
* enrollDate :註冊日期
* nowDate : 當前日期或給定日期
*/
public void CalculateTheUseYaers (String enrollDate,String nowDate){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 建立日期格式
Calendar c1 = Calendar.getInstance(); // 建立日曆物件
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(sdf.parse(enrollDate));
c2.setTime(sdf.parse(nowDate));
} catch (ParseException e) {
e.printStackTrace();
}
int years = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR); // 計算年度差
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);// 計算月度差
int day = c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH);// 計算日數差 (DAY_OF_MONTH為月中的天數)
int months = years *12 + month; // 計算總共相差的月份數
System.out.println("年度差:"+ years);
System.out.println("月度差:" + month);
System.out.println("天數差:" + day);
System.out.println("共相差月份:"+ months);
if (years == 0) { // 同一年
if (months < 11) { // 共相差月份小於11
System.out.println("使用年限為0");
}
if (months == 11) { // 共相差月份等於11
if (day < 0) { // 相差天數小於0
System.out.println("使用年限為0");
}
if (day >= 0) { // 相差天數大於等於0
System.out.println("使用年限為1");
}
}
}
if (years ==1) { // 相差一年
if (months < 11) { // 共相差月份小於11
System.out.println("使用年限為0");
}
if (months == 11) { // 共相差月份等於11
if (day < 0) { // 相差天數小於0
System.out.println("使用年限為0");
}
if (day >= 0) { // 相差天數大於等於0
System.out.println("使用年限為1");
}
}
if (months > 11) {
System.out.println("使用年限為1");
}
}
if (years >=2) { // 相差2年或2年以上
if (month < 0) { // 月度差小於0
System.out.println("使用年限為:"+(years - 1));
}
if (month == 0) { // 月度差等於0
if (day < 0) { // 日數差小於0
System.out.println("使用年限為:"+(years - 1));
}
if (day >= 0) { // 日數差大於等於0
System.out.println("使用年限為:"+ years);
}
}
if (month > 0) { // 月度差大於0
System.out.println("使用年限為:"+ years);
}
}
}