计算时间差的代码BUG
1. differentDays
项目中有个业务需要用到计算两个时间相差天数,自己当时懒得写,就去百度上搜了下相关的代码,找到了一个浏览量不错的博客,代码如下
/**
* date2比date1多的天数
* @param date1
* @param date2
* @return
*/
public static int differentDays(Date date1,Date date2)
{
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
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);
if(year1 != year2) //不同年
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0) //闰年
{
timeDistance += 366;
}
else //不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) ;
}
else //同一年
{
System.out.println("判断day2 - day1 : " + (day2-day1));
return day2-day1;
}
}
- 当第二个日期比第一个日期大且同一年,如第一个日期2019-1-1,第二个日期2019-4-20,计算结果如下:
相差109天,计算结果正确 - 当第二个日期比第一个日期大且不同年,如第一个日期2019-1-1,第二个日期2020-4-20,计算结果如下:相差475天,计算结果正确
- 当第二个日期比第一个日期小且不同年,如第一个日期2020-4-20,第二个日期2019-1-1,理论上我们想得到的结果是相差475天,实际计算结果是109天
2. 替换
LocalDate localDate1 = LocalDate.parse("2020-04-20");
LocalDate localDate2 = LocalDate.parse("2019-01-01");
System.out.println(Math.abs(localDate2.toEpochDay() - localDate1.toEpochDay()));
总结: 千万别在网上复制来路不明的代码乱用,如果真的要用,必须反复测试,否则哪一天突然暴雷有你受的。