importjava.text.ParsePosition;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.regex.Pattern;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;publicclassDateUtil {protectedstaticLog logger=LogFactory.getLog(DateUtil.class);//格式:年-月-日 小时:分钟:秒publicstaticfinalString FORMAT_ONE="yyyy-MM-dd HH:mm:ss";//格式:年-月-日 小时:分钟publicstaticfinalString FORMAT_TWO="yyyy-MM-dd HH:mm";//格式:年月日 小时分钟秒publicstaticfinalString FORMAT_THREE="yyyyMMdd-HHmmss";//格式:年-月-日publicstaticfinalString LONG_DATE_FORMAT="yyyy-MM-dd";//格式:月-日publicstaticfinalString SHORT_DATE_FORMAT="MM-dd";//格式:小时:分钟:秒publicstaticfinalString LONG_TIME_FORMAT="HH:mm:ss";//格式:年-月publicstaticfinalString MONTG_DATE_FORMAT="yyyy-MM";//年的加减publicstaticfinalintSUB_YEAR=Calendar.YEAR;//月加减publicstaticfinalintSUB_MONTH=Calendar.MONTH;//天的加减publicstaticfinalintSUB_DAY=Calendar.DATE;//小时的加减publicstaticfinalintSUB_HOUR=Calendar.HOUR;//分钟的加减publicstaticfinalintSUB_MINUTE=Calendar.MINUTE;//秒的加减publicstaticfinalintSUB_SECOND=Calendar.SECOND;staticfinalString dayNames[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
@SuppressWarnings("unused")privatestaticfinalSimpleDateFormat timeFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");publicDateUtil() {
}/*** 把符合日期格式的字符串转换为日期类型*/publicstaticjava.util.Date stringtoDate(String dateStr, String format) {
Date d=null;
SimpleDateFormat formater=newSimpleDateFormat(format);try{
formater.setLenient(false);
d=formater.parse(dateStr);
}catch(Exception e) {//log.error(e);d=null;
}returnd;
}/*** 把符合日期格式的字符串转换为日期类型*/publicstaticjava.util.Date stringtoDate(String dateStr, String format,
ParsePosition pos) {
Date d=null;
SimpleDateFormat formater=newSimpleDateFormat(format);try{
formater.setLenient(false);
d=formater.parse(dateStr, pos);
}catch(Exception e) {
d=null;
}returnd;
}/*** 把日期转换为字符串*/publicstaticString dateToString(java.util.Date date, String format) {
String result="";
SimpleDateFormat formater=newSimpleDateFormat(format);try{
result=formater.format(date);
}catch(Exception e) {//log.error(e);}returnresult;
}/*** 获取当前时间的指定格式*/publicstaticString getCurrDate(String format) {returndateToString(newDate(), format);
}publicstaticString dateSub(intdateKind, String dateStr,intamount) {
Date date=stringtoDate(dateStr, FORMAT_ONE);
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateKind, amount);returndateToString(calendar.getTime(), FORMAT_ONE);
}/*** 两个日期相减
*@return相减得到的秒数*/publicstaticlongtimeSub(String firstTime, String secTime) {longfirst=stringtoDate(firstTime, FORMAT_ONE).getTime();longsecond=stringtoDate(secTime, FORMAT_ONE).getTime();return(second-first)/1000;
}/*** 获得某月的天数*/publicstaticintgetDaysOfMonth(String year, String month) {intdays=0;if(month.equals("1")||month.equals("3")||month.equals("5")||month.equals("7")||month.equals("8")||month.equals("10")||month.equals("12")) {
days=31;
}elseif(month.equals("4")||month.equals("6")||month.equals("9")||month.equals("11")) {
days=30;
}else{if((Integer.parseInt(year)%4==0&&Integer.parseInt(year)%100!=0)||Integer.parseInt(year)%400==0) {
days=29;
}else{
days=28;
}
}returndays;
}/*** 获取某年某月的天数*/publicstaticintgetDaysOfMonth(intyear,intmonth) {
Calendar calendar=Calendar.getInstance();
calendar.set(year, month-1,1);returncalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}/*** 获得当前日期*/publicstaticintgetToday() {
Calendar calendar=Calendar.getInstance();returncalendar.get(Calendar.DATE);
}/*** 获得当前月份*/publicstaticintgetToMonth() {
Calendar calendar=Calendar.getInstance();returncalendar.get(Calendar.MONTH)+1;
}/*** 获得当前年份*/publicstaticintgetToYear() {
Calendar calendar=Calendar.getInstance();returncalendar.get(Calendar.YEAR);
}/*** 返回日期的天*/publicstaticintgetDay(Date date) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);returncalendar.get(Calendar.DATE);
}/*** 返回日期的年*/publicstaticintgetYear(Date date) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);returncalendar.get(Calendar.YEAR);
}/*** 返回日期的月份,1-12*/publicstaticintgetMonth(Date date) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);returncalendar.get(Calendar.MONTH)+1;
}/*** 计算两个日期相差的天数,如果date2 > date1 返回正数,否则返回负数*/publicstaticlongdayDiff(Date date1, Date date2) {return(date2.getTime()-date1.getTime())/86400000;
}/*** 比较两个日期的年差*/publicstaticintyearDiff(String before, String after) {
Date beforeDay=stringtoDate(before, LONG_DATE_FORMAT);
Date afterDay=stringtoDate(after, LONG_DATE_FORMAT);returngetYear(afterDay)-getYear(beforeDay);
}/*** 比较指定日期与当前日期的差*/publicstaticintyearDiffCurr(String after) {
Date beforeDay=newDate();
Date afterDay=stringtoDate(after, LONG_DATE_FORMAT);returngetYear(beforeDay)-getYear(afterDay);
}/*** 比较指定日期与当前日期的差*/publicstaticlongdayDiffCurr(String before) {
Date currDate=DateUtil.stringtoDate(currDay(), LONG_DATE_FORMAT);
Date beforeDate=stringtoDate(before, LONG_DATE_FORMAT);return(currDate.getTime()-beforeDate.getTime())/86400000;
}/*** 获取每月的第一周*/publicstaticintgetFirstWeekdayOfMonth(intyear,intmonth) {
Calendar c=Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY);//星期天为第一天c.set(year, month-1,1);returnc.get(Calendar.DAY_OF_WEEK);
}/*** 获取每月的最后一周*/publicstaticintgetLastWeekdayOfMonth(intyear,intmonth) {
Calendar c=Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY);//星期天为第一天c.set(year, month-1, getDaysOfMonth(year, month));returnc.get(Calendar.DAY_OF_WEEK);
}/*** 获得当前日期字符串,格式"yyyy_MM_dd_HH_mm_ss"
*
*@return*/publicstaticString getCurrent() {
Calendar cal=Calendar.getInstance();
cal.setTime(newDate());intyear=cal.get(Calendar.YEAR);intmonth=cal.get(Calendar.MONTH)+1;intday=cal.get(Calendar.DAY_OF_MONTH);inthour=cal.get(Calendar.HOUR_OF_DAY);intminute=cal.get(Calendar.MINUTE);intsecond=cal.get(Calendar.SECOND);
StringBuffer sb=newStringBuffer();
sb.append(year).append("_").append(StringUtil.addzero(month,2))
.append("_").append(StringUtil.addzero(day,2)).append("_")
.append(StringUtil.addzero(hour,2)).append("_").append(
StringUtil.addzero(minute,2)).append("_").append(
StringUtil.addzero(second,2));returnsb.toString();
}/*** 获得当前日期字符串,格式"yyyy-MM-dd HH:mm:ss"
*
*@return*/publicstaticString getNow() {
Calendar today=Calendar.getInstance();returndateToString(today.getTime(), FORMAT_ONE);
}/*** 判断日期是否有效,包括闰年的情况
*
*@paramdate
* YYYY-mm-dd
*@return*/publicstaticbooleanisDate(String date) {
StringBuffer reg=newStringBuffer("^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");
reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");
reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");
reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");
reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");
reg.append("1-9])|(1[0-9])|(2[0-8]))))))");
Pattern p=Pattern.compile(reg.toString());returnp.matcher(date).matches();
}