java计算两个时间相差天数的方法汇总
问题描述:
输入:两个日期
输出:两个日期相差的天数
具体代码实现
方法1:
通过Calendar类的日期比较。注意:这里需要考虑一下:
- 日期是跨年份的,如一个是2012年,一个是2015年的
- 年份是分闰年和平年的,各自的天数不同
/** *date2比date1多的天数 *@paramdate1 *@paramdate2 *@return */ publicstaticintdifferentDays(Datedate1,Datedate2) { Calendarcal1=Calendar.getInstance(); cal1.setTime(date1); Calendarcal2=Calendar.getInstance(); cal2.setTime(date2); intday1=cal1.get(Calendar.DAY_OF_YEAR); intday2=cal2.get(Calendar.DAY_OF_YEAR); intyear1=cal1.get(Calendar.YEAR); intyear2=cal2.get(Calendar.YEAR); if(year1!=year2)//同一年 { inttimeDistance=0; for(inti=year1;i<year2;i++) { if(i%4==0&&i%100!=0||i%400==0)//闰年 { timeDistance+=366; } else//不是闰年 { timeDistance+=365; } } returntimeDistance+(day2-day1); } else//不同年 { System.out.println("判断day2-day1:"+(day2-day1)); returnday2-day1; } }
方法2:
直接通过计算两个日期的毫秒数,他们的差除以一天的毫秒数,即可得到我们想要的两个日期相差的天数。
/** *通过时间秒毫秒数判断两个时间的间隔 *@paramdate1 *@paramdate2 *@return */ publicstaticintdifferentDaysByMillisecond(Datedate1,Datedate2) { intdays=(int)((date2.getTime()-date1.getTime())/(1000*3600*24)); returndays; }
测试:
publicstaticvoidmain(String[]args) { StringdateStr="2008-1-11:21:28"; StringdateStr2="2010-1-21:21:28"; SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); SimpleDateFormatformat2=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); try { Datedate2=format.parse(dateStr2); Datedate=format.parse(dateStr); System.out.println("两个日期的差距:"+differentDays(date,date2)); System.out.println("两个日期的差距:"+differentDaysByMillisecond(date,date2)); }catch(ParseExceptione){ e.printStackTrace(); } }
结果:
两个日期的差距:732
两个日期的差距:732
两种实现方式的比较:
方式一的话,只是通过日期来进行比较两个日期的相差天数的比较,没有精确到相差到一天的时间。如果是只是纯粹通过日期(年月日)来比较比较的话就是方式一。
对于方式二,是通过计算两个日期相差的毫秒数来计算两个日期的天数差的。一样会有一个小问题,就是当他们相差是23个小时的时候,它就不算一天了。如下面的两个日期
2015-1-121:21:28
2015-1-21:21:28
测试代码:
publicstaticvoidmain(String[]args) { StringdateStr="2015-1-121:21:28"; StringdateStr2="2015-1-21:21:28"; SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); SimpleDateFormatformat2=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); try { Datedate2=format.parse(dateStr2); Datedate=format.parse(dateStr); System.out.println("两个日期的差距:"+differentDays(date,date2)); System.out.println("两个日期的差距:"+differentDaysByMillisecond(date,date2)); }catch(ParseExceptione){ e.printStackTrace(); } }
结果:
两个日期的差距:1
两个日期的差距:0
两种方式的不同了,在具体时间相差不到24小时时,方式2的方式不算一天,而方式1是通过日期(年月日)来判断的,所以算相差一天。
以上就是java计算两个时间相差天数的方法,并进行了详细比较,希望对大家的学习有所帮助。