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计算两个时间相差天数的方法,并进行了详细比较,希望对大家的学习有所帮助。