java实现的日期时间转换工具类完整示例
本文实例讲述了java实现的日期时间转换工具类。分享给大家供大家参考,具体如下:
最基础的东西,总结一下,下次用的时候就方便一些了。废话不多说,直接贴代码:
packagecom.incar.base.util; importcom.incar.base.exception.BaseRuntimeException; importjava.text.DateFormat; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.time.*; importjava.time.temporal.ChronoField; importjava.time.temporal.ChronoUnit; importjava.time.temporal.WeekFields; importjava.util.*; /** *CreatedbyAdministratoron2017/4/11. */ publicclassDateUtil{ publicfinalstaticStringDATE_FORMAT_DAY="yyyy-MM-dd"; publicfinalstaticStringDATE_FORMAT_SECOND="yyyy-MM-ddHH:mm:ss"; privatefinalstaticint[]DATE_UNIT_ARR=newint[]{Calendar.MILLISECOND,Calendar.SECOND,Calendar.MINUTE,Calendar.HOUR_OF_DAY, Calendar.DATE,Calendar.MONTH,Calendar.YEAR}; publicstaticCalendarcalendar=null; publicstaticDateFormatdateFormat=null; publicstaticDatedate=null; /** *将日期转为字符串 *@paramdate *@paramformat *@return */ publicstaticStringdateToString(Datedate,Stringformat){ if(date==null){ returnnull; } returnnewSimpleDateFormat(format).format(date); } /** *将日期转换为字符串(转换的时间按照当前登录用户的时区) * *@paramdate *@paramformat *@paramtimeZone *@return */ publicstaticStringdateToString(Datedate,Stringformat,StringtimeZone){ if(date==null){ returnnull; } //1、格式化日期 returngetTimeZoneSimpleDateFormat(format,timeZone).format(date); } /** *获取当前登录用户的日期格式化对象 * *@paramtimeZone *@paramformat *@return */ privatestaticSimpleDateFormatgetTimeZoneSimpleDateFormat(Stringformat,StringtimeZone){ //1、获取对应时区的格式化器 SimpleDateFormatsimpleDateFormat=newSimpleDateFormat(format); simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone)); returnsimpleDateFormat; } /** *将字符串转为日期(转换的时间按照当前登录用户的时区) *@paramdateStr *@paramformat *@return */ publicstaticDatestringToDate(StringdateStr,Stringformat,StringtimeZone){ if(dateStr==null||format==null){ returnnull; } try{ returngetTimeZoneSimpleDateFormat(format,timeZone).parse(dateStr); }catch(ParseExceptione){ throwBaseRuntimeException.getException(e); } } /** *将字符串转为日期 *@paramdateStr *@paramformat *@return */ publicstaticDatestringToDate_CTT(StringdateStr,Stringformat){ if(dateStr==null||format==null){ returnnull; } try{ returngetTimeZoneSimpleDateFormat(format,"CTT").parse(dateStr); }catch(ParseExceptione){ throwBaseRuntimeException.getException(e); } } /** *获取最近在当前日期之前的最后一个日期单位 * *@paramdate *@paramcalendarUnit只支持DateUtil.DATE_UNIT_ARR *@return */ publicstaticDategetFloorDate(Datedate,intcalendarUnit){ if(date==null){ returnnull; } Calendarcalendar=Calendar.getInstance(); calendar.setTime(date); for(inti=0;i<=DATE_UNIT_ARR.length-1;i++){ if(DATE_UNIT_ARR[i]>calendarUnit){ if(Calendar.DATE==DATE_UNIT_ARR[i]){ calendar.set(DATE_UNIT_ARR[i],1); }else{ calendar.set(DATE_UNIT_ARR[i],0); } } if(DATE_UNIT_ARR[i]==calendarUnit){ break; } } returncalendar.getTime(); } /** *获取最近在当前日期之后的第一个日期单位 * *@paramdate *@paramcalendarUnit只支持DateUtil.DATE_UNIT_ARR *@return */ publicstaticDategetCeilDate(Datedate,intcalendarUnit){ if(date==null){ returnnull; } Calendarcalendar=Calendar.getInstance(); calendar.setTime(date); for(inti=0;i<=DATE_UNIT_ARR.length-1;i++){ if(DATE_UNIT_ARR[i]>calendarUnit){ if(Calendar.DATE==DATE_UNIT_ARR[i]){ calendar.set(DATE_UNIT_ARR[i],1); }else{ calendar.set(DATE_UNIT_ARR[i],0); } } if(DATE_UNIT_ARR[i]==calendarUnit){ calendar.add(DATE_UNIT_ARR[i],1); break; } } returncalendar.getTime(); } /** *将开始时间、结束时间根据日期单位划分成时间段 * * *@paramstartDate *@paramendDate *@paramcalendarUnitCalendar.MONTH,Calendar.DATE *@paramdateNum指定的单位日期数量 *@return每一个数组第一个为开始时间,第二个为结束时间;第一个元素结束时间总是等于第二元素开始时间 */ publicstaticListsplitDate(DatestartDate,DateendDate,intcalendarUnit,intdateNum){ List returnList=newArrayList<>(); if(startDate.getTime()>endDate.getTime()){ returnnull; } Calendarc1=Calendar.getInstance(); Calendarc2=Calendar.getInstance(); c1.setTime(startDate); c2.setTime(endDate); CalendarcurC1=Calendar.getInstance(); CalendarcurC2=null; curC1.setTime(startDate); while(curC2==null||curC2.before(c2)){ if(curC2==null){ curC2=Calendar.getInstance(); curC2.setTime(startDate); curC2.add(calendarUnit,dateNum); }else{ curC1.add(calendarUnit,dateNum); curC2.add(calendarUnit,dateNum); } returnList.add(newDate[]{curC1.getTime(),curC2.getTime()}); } //设置最后一个区间的截至日期为endDate returnList.get(returnList.size()-1)[1]=endDate; returnreturnList; } /** *获取开始时间结束时间按照日期单位形成多个日期区间 *分割出来的时间区间以 *第一个区间开始时间为传入开始时间 *最后一个区间结束时间为传入结束时间 *@paramstartDate *@paramendDate *@paramunit1:代表按日;2:代表按周;3:代表按月 *@return */ publicstaticList rangeDate(DatestartDate,DateendDate,intunit){ List returnList=newArrayList<>(); LocalDateTimeldt1=LocalDateTime.ofInstant(startDate.toInstant(),ZoneId.of("+8")); LocalDateTimeldt2=LocalDateTime.ofInstant(endDate.toInstant(),ZoneId.of("+8")); switch(unit){ case1:{ LocalDateTimestart=ldt1.with(ChronoField.SECOND_OF_DAY,0); LocalDateTimeend=ldt1.with(ChronoField.SECOND_OF_DAY,ChronoUnit.DAYS.getDuration().getSeconds()-1); while(true){ returnList.add(newDate[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))}); if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){ break; }else{ start=start.plusDays(1); end=end.plusDays(1); } } break; } case2:{ intdayOfWeek=ldt1.get(ChronoField.DAY_OF_WEEK); LocalDateTimestart=ldt1.plusDays(1-dayOfWeek).with(ChronoField.SECOND_OF_DAY,0); LocalDateTimeend=ldt1.plusDays(7-dayOfWeek).with(ChronoField.SECOND_OF_DAY,ChronoUnit.DAYS.getDuration().getSeconds()-1); while(true){ returnList.add(newDate[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))}); if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){ break; }else{ start=start.plusWeeks(1); end=end.plusWeeks(1); } } if(returnList.size()>0){ Date[]firstEle=returnList.get(0); Date[]lastEle=returnList.get(returnList.size()-1); firstEle[0]=Date.from(ldt1.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8"))); lastEle[1]=Date.from(ldt2.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8"))); } break; } case3:{ LocalDateTimetemp=ldt1; while(true){ intdayOfMonth=temp.get(ChronoField.DAY_OF_MONTH); intmax=temp.getMonth().maxLength(); LocalDateTimestart=temp.plusDays(1-dayOfMonth).with(ChronoField.SECOND_OF_DAY,0); LocalDateTimeend=temp.plusDays(max-dayOfMonth).with(ChronoField.SECOND_OF_DAY,ChronoUnit.DAYS.getDuration().getSeconds()-1); returnList.add(newDate[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))}); if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){ break; }else{ temp=temp.plusMonths(1); } } if(returnList.size()>0){ Date[]firstEle=returnList.get(0); Date[]lastEle=returnList.get(returnList.size()-1); firstEle[0]=Date.from(ldt1.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8"))); lastEle[1]=Date.from(ldt2.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8"))); } break; } } returnreturnList; } /** *计算两个时间相差多少日期单位(不足一个日期单位的的按一个日期单位算) * *@paramd1开始时间 *@paramd2结束时间 *@return相差日期单位数 */ publicstaticintgetDiff(Dated1,Dated2,intcalendarUnit){ doublediff; switch(calendarUnit){ caseCalendar.DATE:{ diff=1000*60*60*24; break; } caseCalendar.HOUR_OF_DAY:{ diff=1000*60*60; break; } caseCalendar.MINUTE:{ diff=1000*60; break; } caseCalendar.SECOND:{ diff=1000; break; } default:{ throwBaseRuntimeException.getException("[DateUtil.getDiff],CalendarUnitNotSupport!"); } } Longbegin=d1.getTime(); Longend=d2.getTime(); Doubleres=(end-begin)/diff; return(int)Math.ceil(res); } /** *会改变参数值 *格式化日期参数开始日期和结束日期 *格式规则为: *开始日期去掉时分秒 *结束日期设置为当天23:59:59 * *@paramstartDate *@paramendDate */ publicstaticvoidformatDateParam(DatestartDate,DateendDate){ if(startDate!=null){ startDate.setTime(getFloorDate(startDate,Calendar.DATE).getTime()); } if(endDate!=null){ DatetempDate=getCeilDate(endDate,Calendar.DATE); CalendarendC=Calendar.getInstance(); endC.setTime(tempDate); endC.add(Calendar.SECOND,-1); endDate.setTime(endC.getTimeInMillis()); } } /** *获取一个日期的数字表示形式 *例如: *2018-3-1215:13:12888表示成20180312151312888 * *@paramdate *@paramcalendarUnit最小的日期单位 *@return */ publicstaticLonggetDateNum(Datedate,intcalendarUnit){ if(date==null){ returnnull; } StringBuffersb=newStringBuffer(); Calendarc=Calendar.getInstance(); c.setTime(date); if(calendarUnit>=Calendar.YEAR){ sb.append(c.get(Calendar.YEAR)); } if(calendarUnit>=Calendar.MONTH){ sb.append(FormatUtil.formatToString(c.get(Calendar.MONTH)+1,"00")); } if(calendarUnit>=Calendar.DATE){ sb.append(FormatUtil.formatToString(c.get(Calendar.DATE),"00")); } if(calendarUnit>=Calendar.HOUR_OF_DAY){ sb.append(FormatUtil.formatToString(c.get(Calendar.HOUR_OF_DAY),"00")); } if(calendarUnit>=Calendar.MINUTE){ sb.append(FormatUtil.formatToString(c.get(Calendar.MINUTE),"00")); } if(calendarUnit>=Calendar.SECOND){ sb.append(FormatUtil.formatToString(c.get(Calendar.SECOND),"00")); } if(calendarUnit>=Calendar.MILLISECOND){ sb.append(FormatUtil.formatToString(c.get(Calendar.MILLISECOND),"000")); } returnLong.parseLong(sb.toString()); } /** *判断两个日期是否相等 * *@paramd1 *@paramd2 *@paramcalendarUnit对比的最小日期单位 *@return */ publicstaticbooleanisEqual(Dated1,Dated2,intcalendarUnit){ Calendarc1=Calendar.getInstance(); Calendarc2=Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); for(inti=DATE_UNIT_ARR.length-1;i>=0;i--){ if(calendarUnit>=DATE_UNIT_ARR[i]){ intv1=c1.get(DATE_UNIT_ARR[i]); intv2=c2.get(DATE_UNIT_ARR[i]); if(v1!=v2){ returnfalse; } }else{ break; } } returntrue; } /** *获取当天初始时间 * *@paramdate时间 *@return初始时间(yyyy-MM-dd00:00:00) */ publicstaticDategetInitialTime(Datedate){ DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd00:00:00"); StringdateStr=dateFormat.format(date); try{ returndateFormat.parse(dateStr); }catch(ParseExceptione){ e.printStackTrace(); } returnnull; } /** *获取当天最后时间 * *@paramdate时间 *@return最后时间(yyyy-MM-dd23:59:59) */ publicstaticDategetTerminalTime(Datedate){ DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd"); StringdateStr=dateFormat.format(date); dateStr=dateStr+"23:59:59"; dateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); try{ returndateFormat.parse(dateStr); }catch(ParseExceptione){ e.printStackTrace(); } returnnull; } publicstaticStringdate2Str(Datedate){ DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndateFormat.format(date); } /** *计算两个时间间隔多少秒 * *@paramstartDate *@paramendDate *@return */ publicstaticLongintervalTime(DatestartDate,DateendDate){ longa=endDate.getTime(); longb=startDate.getTime(); Longc=((a-b)/1000); returnc; } /** *检测一个日期是否在小时之内,支持跨天的小时 * *@paramtime *@paramstartDate *@paramendDate *@return */ publicstaticbooleancheckDateIn(Datetime,DatestartDate,DateendDate){ if(startDate==null||endDate==null||time==null){ returntrue; } returntime.before(endDate)&&time.after(startDate); } /** *检测一个日期是否在时分秒之内,支持跨天的小时 * *@paramtime *@paramstartHms *@paramendHms *@return */ publicstaticbooleancheckHmsIn(Datetime,StringstartHms,StringendHms){ if(startHms==null||endHms==null||time==null){ returntrue; } LocalTimestartTime=LocalTime.of( Integer.valueOf(startHms.substring(0,2)), Integer.valueOf(startHms.substring(2,4)), Integer.valueOf(startHms.substring(4,6)) ); LocalTimeendTime=LocalTime.of( Integer.valueOf(endHms.substring(0,2)), Integer.valueOf(endHms.substring(2,4)), Integer.valueOf(endHms.substring(4,6)) ); LocalTimecurTime=LocalDateTime.ofInstant(time.toInstant(),ZoneId.of("+8")).toLocalTime(); if(endTime.isAfter(startTime)){ returnstartTime.isBefore(curTime)&&endTime.isAfter(curTime); }else{ return(startTime.isBefore(curTime)&&LocalTime.MAX.isAfter(curTime))||(LocalTime.MIN.isBefore(curTime)&&endTime.isAfter(curTime)); } } /** *功能描述:格式化日期 * *@paramdateStr字符型日期:YYYY/MM/DD格式 *@returnDate日期 */ publicstaticDateparseDate(StringdateStr){ returnparseDate(dateStr,"yyyy-MM-dd"); } /** *功能描述:格式化日期 * *@paramdateStr字符型日期 *@paramformat格式 *@returnDate日期 */ publicstaticDateparseDate(StringdateStr,Stringformat){ try{ dateFormat=newSimpleDateFormat(format); Stringdt=dateStr.replaceAll("-","/"); if((!dt.equals(""))&&(dt.length() PS:这里再为大家推荐几款关于日期与时间计算的在线工具供大家参考使用:
在线日期/天数计算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi在线万年历日历:
http://tools.jb51.net/bianmin/wannianli在线阴历/阳历转换工具:
http://tools.jb51.net/bianmin/yinli2yangliUnix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime更多关于java相关内容感兴趣的读者可查看本站专题:《java日期与时间操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。