项目场景:
计算两个Date类型的天数差值及比较大小
问题描述:
之前由于用Date.getTime()根据毫秒数计算 间隔差值结果发现 获取的毫秒数居然有问题 间隔两天的毫秒数据相减不能整除(24*60*60*1000)
原因分析:
查询了下原因大概是因为Date.getTime()取的毫秒数会有浮动具体原因未知
解决方案:计算差值的同时顺便比较大小了 如果endTime比较大则返回天数为正 否则为负
/**
* 计算两个时间相差多少天
* @param
* @return
* @author jixiang
* date: 2020/9/14 9:39
* history:
*/
public static long getDay(Date startTime,Date endTime) {
//默认endTime比较大
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
//long类型的日期也支持
cal1.setTime(startTime);
cal2.setTime(endTime);
//获取日期在一年(月、星期)中的第多少天
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
//获取当前日期所在的年份
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
int maxyear=0;
int minyear=0;
int a=1;
if(year2>year1){
maxyear=year2;
minyear=year1;
}else {
maxyear=year1;
minyear=year2;
a=-1;
}
//如果两个日期的是在同一年,则只需要计算两个日期在一年的天数差;
//不在同一年,还要加上相差年数对应的天数,闰年有366天
if(year1 != year2) //不同年
{
int timeDistance = 0 ;
for(int i = minyear ; i < maxyear ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0) //闰年
{
timeDistance += 366;
}
else //不是闰年
{
timeDistance += 365;
}
}
System.out.println(timeDistance*a + (day2-day1));
return timeDistance*a + (day2-day1);
}
else //同年
{
return day2-day1;
}
}