JAVA计算两个日期相差的实例
在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()
}
相关文章
- java卸载dll,如何在java中卸载Dll?[通俗易懂]
- java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例
- java开发常用四大框架_大牛经验!常用的5款Java框架汇总[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- 编写java判断闰年_Java 判断闰年代码实例
- java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]
- JAVA的使用_Java集成开发环境
- java url加密_Java实现url加密处理的方法示例
- java 静态内部类 实例化_内部类及静态内部类的实例化「建议收藏」
- java反射 getMethod_JAVA 反射 getMethod() 和 invoke() 具体应用[通俗易懂]
- Java常用注解
- Java基础之多线程实例详解编程语言
- java最全的集合类或接口汇总详解编程语言
- Java经典实例:纪元秒和本地日期时间互换详解编程语言
- Oracle终止支持Java:转向新时代(oracle抛弃java)
- Linux 卸载Java:简单步骤完成(linux卸载java)
- java获取网页源码详解编程语言
- 使用Java操作MySQL数据库快速精准查询(java查询mysql数据库)
- Java程序员如何优雅操作Redis(java操作redis)
- 策略探究Redis与Java联合实现的过期策略(redisjava过期)
- 处理使用Java实现Redis中数据的过期处理(redisjava过期)
- MySQL之Java实现主从复制(java mysql主从)
- Linux Java时区调整:让处理日期更加方便(linux java时区)
- 数据库Java编程修改Oracle数据库的实践(java修改oracle)
- [JAVA]十四种Java开发工具点评
- 哲学家就餐问题中的JAVA多线程学习