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);
Listresult=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@
*/
publicstaticListgetWeekDays(intyearNum,intweekNum){
returngetWeekDays(yearNum,weekNum,Calendar.MONDAY);
}
/**
*计算某年某周内的所有日期(七天)
*
*@paramyearNum
*@paramweekNum
*@returnyyyy-MM-dd格式的日期列表
*/
publicstaticListgetWeekDays(intyear,intweekOfYear,
intfirstDayOfWeek){
Listdates=newArrayList();
intdayOfWeek=firstDayOfWeek;
for(inti=0;i0&&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(Listdates){
booleanflag=false;
SimpleDateFormatfmt=newSimpleDateFormat(DATE_FORMAT_YMD);
Datedate=newDate();
StringdateStr=fmt.format(date);
for(inti=0;i0){
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
*@
*/
publicstaticListgetWeekDaysAroundDate(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
*/
publicstaticListgetTimePointsByHour(int[]hours){
ListhourPoints=newArrayList();
StringsbStart=":00:00";
StringsbEnd=":59:59";
for(inti=0;i
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。