判断两个日期是否小于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
作者
卑微幻想家
发布于
2023-08-10
许可协议