Java日期工具类DateUtils实例详解
在项目开发中,日期是我们必不可少的的一部分,本文将总结代码开发中的关于日期常用的一些方法,以方便自己后期使用。下面直接上菜了:
packagecom.example.util; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.ArrayList; importjava.util.Calendar; importjava.util.Date; importjava.util.List; /** *日期常用方法 * *@author * */ publicclassDateUtils{ /** *常用变量 */ publicstaticfinalStringDATE_FORMAT_FULL="yyyy-MM-ddHH:mm:ss"; publicstaticfinalStringDATE_FORMAT_YMD="yyyy-MM-dd"; publicstaticfinalStringDATE_FORMAT_HMS="HH:mm:ss"; publicstaticfinalStringDATE_FORMAT_HM="HH:mm"; publicstaticfinalStringDATE_FORMAT_YMDHM="yyyy-MM-ddHH:mm"; publicstaticfinalStringDATE_FORMAT_YMDHMS="yyyyMMddHHmmss"; publicstaticfinallongONE_DAY_MILLS=3600000*24; publicstaticfinalintWEEK_DAYS=7; privatestaticfinalintdateLength=DATE_FORMAT_YMDHM.length(); /** *日期转换为制定格式字符串 * *@paramtime *@paramformat *@return */ publicstaticStringformatDateToString(Datetime,Stringformat){ SimpleDateFormatsdf=newSimpleDateFormat(format); returnsdf.format(time); } /** *字符串转换为制定格式日期 *(注意:当你输入的日期是2014-12-2112:12,format对应的应为yyyy-MM-ddHH:mm *否则异常抛出) *@paramdate *@paramformat *@return *@throwsParseException *@ */ publicstaticDateformatStringToDate(Stringdate,Stringformat){ SimpleDateFormatsdf=newSimpleDateFormat(format); try{ returnsdf.parse(date); }catch(ParseExceptionex){ ex.printStackTrace(); thrownewRuntimeException(ex.toString()); } } /** *判断一个日期是否属于两个时段内 *@paramtime *@paramtimeRange *@return */ publicstaticbooleanisTimeInRange(Datetime,Date[]timeRange){ return(!time.before(timeRange[0])&&!time.after(timeRange[1])); } /** *从完整的时间截取精确到分的时间 * *@paramfullDateStr *@return */ publicstaticStringgetDateToMinute(StringfullDateStr){ returnfullDateStr==null?null :(fullDateStr.length()>=dateLength?fullDateStr.substring( 0,dateLength):fullDateStr); } /** *返回指定年度的所有周。List中包含的是String[2]对象string[0]本周的开始日期,string[1]是本周的结束日期。 *日期的格式为YYYY-MM-DD每年的第一个周,必须包含星期一且是完整的七天。 *例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。星期一在哪一年,那么包含这个星期的周就是哪一年的周。 *例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。 * *@paramyear *格式YYYY,必须大于1900年度小于9999年 *@return@ */ publicstaticListgetWeeksByYear(finalintyear){ intweeks=getWeekNumOfYear(year); List result=newArrayList (weeks); intstart=1; intend=7; for(inti=1;i<=weeks;i++){ String[]tempWeek=newString[2]; tempWeek[0]=getDateForDayOfWeek(year,i,start); tempWeek[1]=getDateForDayOfWeek(year,i,end); result.add(tempWeek); } returnresult; } /** *计算指定年、周的上一年、周 * *@paramyear *@paramweek *@return@ */ publicstaticint[]getLastYearWeek(intyear,intweek){ if(week<=0){ thrownewIllegalArgumentException("周序号不能小于1!!"); } int[]result={week,year}; if(week==1){ //上一年 result[1]-=1; //最后一周 result[0]=getWeekNumOfYear(result[1]); }else{ result[0]-=1; } returnresult; } /** *下一个[周,年] * *@paramyear *@paramweek *@return@ */ publicstaticint[]getNextYearWeek(intyear,intweek){ if(week<=0){ thrownewIllegalArgumentException("周序号不能小于1!!"); } int[]result={week,year}; intweeks=getWeekNumOfYear(year); if(week==weeks){ //下一年 result[1]+=1; //第一周 result[0]=1; }else{ result[0]+=1; } returnresult; } /** *计算指定年度共有多少个周。(从周一开始) * *@paramyear *@return@ */ publicstaticintgetWeekNumOfYear(finalintyear){ returngetWeekNumOfYear(year,Calendar.MONDAY); } /** *计算指定年度共有多少个周。 * *@paramyear *yyyy *@return@ */ publicstaticintgetWeekNumOfYear(finalintyear,intfirstDayOfWeek){ //每年至少有52个周,最多有53个周。 intminWeeks=52; intmaxWeeks=53; intresult=minWeeks; intsIndex=4; Stringdate=getDateForDayOfWeek(year,maxWeeks,firstDayOfWeek); //判断年度是否相符,如果相符说明有53个周。 if(date.substring(0,sIndex).equals(year)){ result=maxWeeks; } returnresult; } publicstaticintgetWeeksOfWeekYear(finalintyear){ Calendarcal=Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setMinimalDaysInFirstWeek(WEEK_DAYS); cal.set(Calendar.YEAR,year); returncal.getWeeksInWeekYear(); } /** *获取指定年份的第几周的第几天对应的日期yyyy-MM-dd(从周一开始) * *@paramyear *@paramweekOfYear *@paramdayOfWeek *@returnyyyy-MM-dd格式的日期@ */ publicstaticStringgetDateForDayOfWeek(intyear,intweekOfYear, intdayOfWeek){ returngetDateForDayOfWeek(year,weekOfYear,dayOfWeek,Calendar.MONDAY); } /** *获取指定年份的第几周的第几天对应的日期yyyy-MM-dd,指定周几算一周的第一天(firstDayOfWeek) * *@paramyear *@paramweekOfYear *@paramdayOfWeek *@paramfirstDayOfWeek *指定周几算一周的第一天 *@returnyyyy-MM-dd格式的日期 */ publicstaticStringgetDateForDayOfWeek(intyear,intweekOfYear, intdayOfWeek,intfirstDayOfWeek){ Calendarcal=Calendar.getInstance(); cal.setFirstDayOfWeek(firstDayOfWeek); cal.set(Calendar.DAY_OF_WEEK,dayOfWeek); cal.setMinimalDaysInFirstWeek(WEEK_DAYS); cal.set(Calendar.YEAR,year); cal.set(Calendar.WEEK_OF_YEAR,weekOfYear); returnformatDateToString(cal.getTime(),DATE_FORMAT_YMD); } /** *获取指定日期星期几 * *@paramdatetime *@throwsParseException *@ */ publicstaticintgetWeekOfDate(Stringdatetime)throwsParseException{ Calendarcal=Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setMinimalDaysInFirstWeek(WEEK_DAYS); Datedate=formatStringToDate(datetime,DATE_FORMAT_YMD); cal.setTime(date); returncal.get(Calendar.DAY_OF_WEEK); } /** *计算某年某周内的所有日期(从周一开始为每周的第一天) * *@paramyearNum *@paramweekNum *@return@ */ publicstaticList getWeekDays(intyearNum,intweekNum){ returngetWeekDays(yearNum,weekNum,Calendar.MONDAY); } /** *计算某年某周内的所有日期(七天) * *@paramyearNum *@paramweekNum *@returnyyyy-MM-dd格式的日期列表 */ publicstaticList getWeekDays(intyear,intweekOfYear, intfirstDayOfWeek){ List dates=newArrayList (); intdayOfWeek=firstDayOfWeek; for(inti=0;i 0&&endDate!=null &&endDate.length()>0){ Dateend=formatStringToDate(endDate,DATE_FORMAT_YMD); Datestart=formatStringToDate(startDate,DATE_FORMAT_YMD); dayGap=getDaysBetween(start,end); } returndayGap; } privatestaticintgetDaysBetween(DatestartDate,DateendDate){ return(int)((endDate.getTime()-startDate.getTime())/ONE_DAY_MILLS); } /** *计算两个日期之间的天数差 *@paramstartDate *@paramendDate *@return */ publicstaticintgetDaysGapOfDates(DatestartDate,DateendDate){ intdate=0; if(startDate!=null&&endDate!=null){ date=getDaysBetween(startDate,endDate); } returndate; } /** *计算两个日期之间的年份差距 * *@paramfirstDate *@paramsecondDate *@return */ publicstaticintgetYearGapOfDates(DatefirstDate,DatesecondDate){ if(firstDate==null||secondDate==null){ return0; } CalendarhelpCalendar=Calendar.getInstance(); helpCalendar.setTime(firstDate); intfirstYear=helpCalendar.get(Calendar.YEAR); helpCalendar.setTime(secondDate); intsecondYear=helpCalendar.get(Calendar.YEAR); returnsecondYear-firstYear; } /** *计算两个日期之间的月份差距 * *@paramfirstDate *@paramsecondDate *@return */ publicstaticintgetMonthGapOfDates(DatefirstDate,DatesecondDate){ if(firstDate==null||secondDate==null){ return0; } return(int)((secondDate.getTime()-firstDate.getTime()) /ONE_DAY_MILLS/30); } /** *计算是否包含当前日期 * *@paramdatys *@return */ publicstaticbooleanisContainCurrent(List dates){ booleanflag=false; SimpleDateFormatfmt=newSimpleDateFormat(DATE_FORMAT_YMD); Datedate=newDate(); StringdateStr=fmt.format(date); for(inti=0;i 0){ Datedate=formatStringToDate(startDate,DATE_FORMAT_YMD); Calendarc=Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_YEAR,time); date=c.getTime(); resultDate=formatDateToString(date,DATE_FORMAT_YMD); } returnresultDate; } /** *获取从某日期开始计算,指定的日期所在该年的第几周 * *@paramdate *@paramadmitDate *@return *@throwsParseException *@ */ publicstaticint[]getYearAndWeeks(Stringdate,StringadmitDate) throwsParseException{ Calendarc=Calendar.getInstance(); c.setTime(formatStringToDate(admitDate,DATE_FORMAT_YMD)); inttime=c.get(Calendar.DAY_OF_WEEK); returngetWeekAndYear(date,0,time); } /** *获取指定日期refDate,前或后一周的所有日期 * *@paramrefDate *参考日期 *@paramweekOffset *-1:上周0:本周1:下周 *@paramstartDate *哪天算一周的第一天 *@returnyyyy-MM-dd格式的日期 *@throwsParseException *@ */ publicstaticList getWeekDaysAroundDate(StringrefDate, intweekOffset,StringstartDate)throwsParseException{ //以startDate为一周的第一天 Calendarc=Calendar.getInstance(); c.setTime(formatStringToDate(startDate,DATE_FORMAT_YMD)); intfirstDayOfWeek=c.get(Calendar.DAY_OF_WEEK); //获取相应周 int[]weekAndYear=getWeekAndYear(refDate,weekOffset,firstDayOfWeek); //获取相应周的所有日期 returngetWeekDays(weekAndYear[1],weekAndYear[0],firstDayOfWeek); } /** *根据时间点获取时间区间 * *@paramhours *@return */ publicstaticList getTimePointsByHour(int[]hours){ List hourPoints=newArrayList (); StringsbStart=":00:00"; StringsbEnd=":59:59"; for(inti=0;i 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。