判断两个日期是否小于1年,考虑闰年
直接上代码吧
public static boolean isLessOneYear(Date startTime, Date endTime) throws ParseException {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startTime);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endTime);
// 获取时间间隔的毫秒数
long millisecondsBetween = endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis();
int yearInterval = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
// 如果年份间隔大于1或者小于0,那么时间间隔肯定大于一年
if (yearInterval > 1 || yearInterval < 0) {
return false;
}
// 计算毫秒数对应的天数间隔
long daysBetween = millisecondsBetween / (1000 * 60 * 60 * 24);
// 判断是否是闰年
boolean isStartLeapYear = isLeapYear(startCalendar.get(Calendar.YEAR));
boolean isEndLeapYear = isLeapYear(endCalendar.get(Calendar.YEAR));
int leapYearsBetween = 0;
if (isStartLeapYear) {
// 如果开始时间是闰年,且开始时间在2月29日之前,那么闰年天数需要加1
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date leapYearDate = simpleDateFormat.parse(startCalendar.get(Calendar.YEAR) + "-02-29 00:00:00");
if (startCalendar.getTimeInMillis() < leapYearDate.getTime()) {
leapYearsBetween = 1;
}
}
if (isEndLeapYear) {
// 如果结束时间是闰年,且结束时间在2月29日之后,那么闰年天数需要加1
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date leapYearDate = simpleDateFormat.parse(endCalendar.get(Calendar.YEAR) + "-02-29 00:00:00");
if (endCalendar.getTimeInMillis() > leapYearDate.getTime()) {
leapYearsBetween = 1;
}
}
// 计算在闰年情况下的时间间隔天数(换算成平年365天来计算)
long adjustedDaysBetween = daysBetween - leapYearsBetween;
return adjustedDaysBetween < 365;
}
/**
* 判断是否是闰年
* @param year
* @return
*/
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
大概解释一下,首先判断两个时间的年份的间隔,如果小于0,说明开始时间小于,这种情况我做了排除,如果大于1那么肯定是大于1年的。
然后,计算两个时间的间隔天数,接下来,我们需要判断开始时间是否是闰年,如果是闰年,并且在2月29日之前,那么,说明整个时间范围的间隔天数肯定会多1天。结束时间判断同理,不存在连续两个闰年的情况,所以上面的逻辑没问题。然后,用总的间隔时间减去闰年天数1天,那么,就是调整后的间隔时间。
判断两个日期是否小于1年,考虑闰年
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/date-interval-one-year