java中計算兩個日期的月數差
阿新 • • 發佈:2019-01-10
/**
* 獲取兩個日期相差的月數
* @param d2 較大的日期
* @param d1 較小的日期
* @return 如果d1>d2返回 月數差 否則返回0
*/
public static int getMonthDiff(String d1, String d2)throws ParseException {
Calendar c1 = Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date1=sdf.parse(d1);
java.util.Date date2=sdf.parse(d2);
c1.setTime(date1);
int year1 = c1.get(Calendar.YEAR);
int year2 = c2.get(Calendar.YEAR);
int month1 = c1.get(Calendar.MONTH);
int month2 = c2.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
int day2 = c2.get(Calendar.DAY_OF_MONTH);
// 獲取年的差值 假設 d1 = 2015-9-30 d2 = 2015-12-16
int yearInterval = year2 - year1;
// 如果 d1的 月-日 小於 d2的 月-日 那麼 yearInterval-- 這樣就得到了相差的年數
if(month2 < month1 || month1 == month2 && day2 < day1) yearInterval --;
// 獲取月數差值
int monthInterval = (month2 + 12) - month1 ;
if(day2 > day1) monthInterval ++;
monthInterval %= 12;
return yearInterval * 12 + monthInterval;
}
public static void main(String[] args) throws ParseException {
System.out.println(MyCalendar.getMonthDiff("2015-3-30", "2016-6-1"));
* 獲取兩個日期相差的月數
* @param d2 較大的日期
* @param d1 較小的日期
* @return 如果d1>d2返回 月數差 否則返回0
*/
public static int getMonthDiff(String d1, String d2)throws ParseException {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
//將String日期轉換成date
java.util.Date date1=sdf.parse(d1);
java.util.Date date2=sdf.parse(d2);
c1.setTime(date1);
c2.setTime(date2);
//判斷兩個日期的大小
int year1 = c1.get(Calendar.YEAR);
int year2 = c2.get(Calendar.YEAR);
int month1 = c1.get(Calendar.MONTH);
int month2 = c2.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
int day2 = c2.get(Calendar.DAY_OF_MONTH);
// 獲取年的差值 假設 d1 = 2015-9-30 d2 = 2015-12-16
int yearInterval = year2 - year1;
// 如果 d1的 月-日 小於 d2的 月-日 那麼 yearInterval-- 這樣就得到了相差的年數
if(month2 < month1 || month1 == month2 && day2 < day1) yearInterval --;
// 獲取月數差值
int monthInterval = (month2 + 12) - month1 ;
if(day2 > day1) monthInterval ++;
monthInterval %= 12;
return yearInterval * 12 + monthInterval;
}
public static void main(String[] args) throws ParseException {
System.out.println(MyCalendar.getMonthDiff("2015-3-30", "2016-6-1"));
}
總結:但凡求週期數之間的差值,都採用(a1+週期值-a2)%週期值,即取餘法(a1)
例如:週期為12(最大值不能大於12)
[11,6]:(6+12-11)%12 = 7
[7,6] :(6+12-7)%12 = 11
[6,7] :(7+12-6)%12 = 1