zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JAVA计算两个日期相差的实例

JAVA实例日期计算 两个 相差
2023-06-13 09:15:11 时间

在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。
调用方式:

复制代码代码如下:

longdate1=getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
longdate2=getDateTime("20121212");  
intday=dateInterval(date1,date2);  
System.out.println(day);
 

具体实现方法调用:
复制代码代码如下:

/** 
 *计算出两个日期之间相差的天数 
 *建议date1大于date2这样计算的值为正数 
 *@paramdate1日期1 
 *@paramdate2日期2 
 *@returndate1-date2 
 */ 
publicstaticintdateInterval(longdate1,longdate2){
   if(date2>date1){
       date2=date2+date1;
       date1=date2-date1;
       date2=date2-date1;
   }

    //Canlendar该类是一个抽象类  
    //提供了丰富的日历字段 
    //本程序中使用到了 
    //Calendar.YEAR   日期中的年份 
    //Calendar.DAY_OF_YEAR    当前年中的天数  
    //getActualMaximum(Calendar.DAY_OF_YEAR)返回今年是365天还是366天 
   Calendarcalendar1=Calendar.getInstance();//获得一个日历  
   calendar1.setTimeInMillis(date1);//用给定的long值设置此Calendar的当前时间值。  

   Calendarcalendar2=Calendar.getInstance();
   calendar2.setTimeInMillis(date2);
   //先判断是否同年  
   inty1=calendar1.get(Calendar.YEAR);
   inty2=calendar2.get(Calendar.YEAR);

   intd1=calendar1.get(Calendar.DAY_OF_YEAR);
   intd2=calendar2.get(Calendar.DAY_OF_YEAR);
   intmaxDays=0;
   intday=0;
   if(y1-y2>0){
       day=numerical(maxDays,d1,d2,y1,y2,calendar2);
   }else{
       day=d1-d2;
   }
   returnday;
}  

/** 
 *日期间隔计算 
 *计算公式(示例): 
 *     20121201-20121212
 *     取出20121201这一年过了多少天d1=天数 取出20121212这一年过了多少天d2=天数
 *     如果2012年这一年有366天就要让间隔的天数+1,因为2月份有29日。 
 *@parammaxDays  用于记录一年中有365天还是366天 
 *@paramd1   表示在这年中过了多少天 
 *@paramd2   表示在这年中过了多少天 
 *@paramy1   当前为2012年 
 *@paramy2   当前为2012年 
 *@paramcalendar 根据日历对象来获取一年中有多少天 
 *@return 计算后日期间隔的天数 
 */ 
publicstaticintnumerical(intmaxDays,intd1,intd2,inty1,inty2,Calendarcalendar){
   intday=d1-d2;
   intbetweenYears=y1-y2;
   List<Integer>d366=newArrayList<Integer>();

   if(calendar.getActualMaximum(Calendar.DAY_OF_YEAR)==366){
       System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
       day+=1;
   }

   for(inti=0;i<betweenYears;i++){
       //当年+1设置下一年中有多少天  
       calendar.set(Calendar.YEAR,(calendar.get(Calendar.YEAR))+1);
       maxDays=calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
       //第一个366天不用+1将所有366记录,先不进行加入然后再少加一个  
       if(maxDays!=366){
           day+=maxDays;
       }else{
           d366.add(maxDays);
       }
       //如果最后一个maxDays等于366day-1  
       if(i==betweenYears-1&&betweenYears>1&&maxDays==366){
           day-=1;
       }
   }

   for(inti=0;i<d366.size();i++){
       //一个或一个以上的366天  
       if(d366.size()>=1){
           day+=d366.get(i);
       } 
   }  
   returnday;
}

/** 
 *将日期字符串装换成日期 
 *@paramstrDate  日期支持年月日示例:yyyyMMdd 
 *@return 1970年1月1日器日期的毫秒数 
 */ 
publicstaticlonggetDateTime(StringstrDate){
   returngetDateByFormat(strDate,"yyyyMMdd").getTime();
}

/** 
 *@paramstrDate  日期字符串 
 *@paramformat   日期格式 
 *@return     Date 
 */ 
publicstaticDategetDateByFormat(StringstrDate,Stringformat){
   SimpleDateFormatsdf=newSimpleDateFormat(format);
   try{
       return(sdf.parse(strDate));
   }catch(Exceptione){
       returnnull;
   }
}
 

例2
复制代码代码如下:
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;

publicclasstest16{
 /**
 *@paramargs
 *@throwsParseException
 */
 publicstaticvoidmain(String[]args)throwsParseException{
 //TODOAuto-generatedmethodstub
 SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
 Dated1=sdf.parse("2012-09-0810:10:10");
 Dated2=sdf.parse("2012-09-1500:00:00");
 System.out.println(daysBetween(d1,d2));
 System.out.println(daysBetween("2012-09-0810:10:10","2012-09-1500:00:00"));
 }

 /**
    *计算两个日期之间相差的天数
    *@paramsmdate较小的时间
    *@parambdate 较大的时间
    *@return相差天数
 *@throwsParseException
    */ 
   publicstaticintdaysBetween(Datesmdate,Datebdate)throwsParseException 
   { 
    SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
    smdate=sdf.parse(sdf.format(smdate));
    bdate=sdf.parse(sdf.format(bdate));
       Calendarcal=Calendar.getInstance(); 
       cal.setTime(smdate); 
       longtime1=cal.getTimeInMillis();              
       cal.setTime(bdate); 
       longtime2=cal.getTimeInMillis();      
       longbetween_days=(time2-time1)/(1000*3600*24);

      returnInteger.parseInt(String.valueOf(between_days));        
   } 

/**
*字符串的日期格式的计算
*/
   publicstaticintdaysBetween(Stringsmdate,Stringbdate)throwsParseException{
    SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
       Calendarcal=Calendar.getInstance(); 
       cal.setTime(sdf.parse(smdate)); 
       longtime1=cal.getTimeInMillis();              
       cal.setTime(sdf.parse(bdate)); 
       longtime2=cal.getTimeInMillis();      
       longbetween_days=(time2-time1)/(1000*3600*24);

      returnInteger.parseInt(String.valueOf(between_days));  
   }
}
 


例3
复制代码代码如下:
//取得剩余天数
  SimpleDateFormatdf=newSimpleDateFormat("yyyymmdd");
  Dated0=newjava.util.Date();
  Dated1=df.parse(end_date);
  longtime0=d0.getTime();
  longtime1=d1.getTime();
  System.out.println((time1-time0)/(1000*60*60*24));

这样算两个时间相差的天数比较好
复制代码代码如下:
/**
    *计算两个日期之间相差的天数
    *
    *@paramdate1
    *@paramdate2
    *@return
    */
   publicstaticintdiffdates(Datedate1,Datedate2){
       intresult=0;
       ElapsedTimeet=newElapsedTime();
       GregorianCalendargc1=newGregorianCalendar();
       GregorianCalendargc2=newGregorianCalendar();
       gc1.setTime(date1);
       gc2.setTime(date2);
       result=et.getDays(gc1,gc2);
       returnresult;
   } 

然后ElapseTime中的方法是:
复制代码代码如下:
publicintgetDays(GregorianCalendarg1,GregorianCalendarg2){
 intelapsed=0;
 GregorianCalendargc1,gc2;
 if(g2.after(g1)){
  gc2=(GregorianCalendar)g2.clone();
  gc1=(GregorianCalendar)g1.clone();
 }else{
  gc2=(GregorianCalendar)g1.clone();
  gc1=(GregorianCalendar)g2.clone();
 }
 gc1.clear(Calendar.MILLISECOND);
 gc1.clear(Calendar.SECOND);
 gc1.clear(Calendar.MINUTE);
 gc1.clear(Calendar.HOUR_OF_DAY);
 gc2.clear(Calendar.MILLISECOND);
 gc2.clear(Calendar.SECOND);
 gc2.clear(Calendar.MINUTE);
 gc2.clear(Calendar.HOUR_OF_DAY);
 while(gc1.before(gc2)){
  gc1.add(Calendar.DATE,1);
  elapsed++;
 }
 returnelapsed;
}
 
其实使用joda最简单
复制代码代码如下:
publicbooleanisRentalOverdue(DateTimedatetimeRented){
 PeriodrentalPeriod=Period.days(2);
 returndatetimeRented.plus(rentalPeriod).isBeforeNow()
}