importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importorg.apache.commons.lang.StringUtils;public classDateUtils {public final static String DATE = "yyyy-MM-dd";public final static String DATE_SLASH = "yyyy/MM/dd";public final static String DATE_CHINESE = "yyyy年MM月dd日";public final static String DATE_TIME = "yyyy-MM-dd HH:mm:ss";public final static String DATE_TIME_HOURS = "yyyy-MM-dd HH";public final static String DATE_TIME_MINUTES = "yyyy-MM-dd HH:mm";public final static String DATE_TIME_SLASH = "yyyy/MM/dd HH:mm:ss";public final static String DATE_TIME_CHINESE = "yyyy年MM月dd日 HH时mm分ss秒";public final static String DATE_TIME_MILLION = "yyyy-MM-dd HH:mm:ss:SSS";public final static String YEAR = "yyyy";public final static String YEAR_TO_MONTH = "yyyyMM";public final static String YEAR_TO_DATE = "yyyyMMdd";public final static String YEAR_TO_SECOND = "yyyyMMddHHmmss";public final static String YEAR_TO_MILLION = "yyyyMMddHHmmssSSS";public final static String ZERO_TIME = " 00:00:00";public final static String ZERO_TIME_MILLION = " 00:00:00:000";public final static String ZERO_TIME_WITHOUT_HOURS = ":00:00";public final static String ZERO_TIME_WITHOUT_MINUTES = ":00";/*** 字符串转成日期、时间格式
*@paramdateString 日期字符串
*@parampattern 格式化类型,默认为yyyy-MM-dd,其它使用DateUtils.xxx
*@return*@throwsParseException*/
public static Date parse(String dateString, String pattern) throwsParseException{if(StringUtils.isBlank(dateString)){return null;
}else{
dateString=dateString.trim();if(StringUtils.isBlank(pattern)){
pattern=DATE;
}
SimpleDateFormat simpleDateFormat= newSimpleDateFormat(pattern);returnsimpleDateFormat.parse(dateString);
}
}/*** 字符串转成日期(yyyy-MM-dd)格式
*@paramdateString 日期字符串
*@returnDate
*@throwsParseException*/
public static Date parseDate(String dateString) throwsParseException{return parse(dateString, null);
}/*** 字符串转成时间(yyyy-MM-dd HH:mm:ss)格式
*@paramdateString 日期字符串
*@return*@throwsParseException*/
public static Date parseDateTime(String dateString) throwsParseException{if(StringUtils.isBlank(dateString)){return null;
}else{
dateString=dateString.trim();if(dateString.length() ==DATE_TIME_HOURS.length()){returnparse(dateString, DATE_TIME_HOURS);
}else if(dateString.length() ==DATE_TIME_MINUTES.length()){returnparse(dateString, DATE_TIME_MINUTES);
}else if(dateString.length() ==DATE_TIME_MILLION.length()){returnparse(dateString, DATE_TIME_MILLION);
}else{returnparse(dateString, DATE_TIME);
}
}
}/*** 时间转字符串
*@paramdate 时间
*@parampattern 格式化类型,默认为yyyy-MM-dd HH:mm:ss,其它使用DateUtils.xxx
*@return
*/
public staticString format(Date date, String pattern){if(date == null){return "";
}else{if(StringUtils.isBlank(pattern)){
pattern=DATE_TIME;
}
SimpleDateFormat simpleDateFormat= newSimpleDateFormat(pattern);returnsimpleDateFormat.format(date);
}
}/*** 时间转日期字符串(yyyy-MM-dd)
*@paramdate 时间
*@return
*/
public staticString formatDate(Date date){returnformat(date, DATE);
}/*** 时间转日期字符串(yyyy-MM-dd HH:mm:ss)
*@paramdate 时间
*@return
*/
public staticString formatDateTime(Date date){return format(date, null);
}/*** 将日期格式转换成时间(yyyy-MM-dd HH:mm:ss)格式
*@paramdateString 日期字符串
*@return
*/
public staticString dateToDateTime(String dateString){if(StringUtils.isBlank(dateString)){return "";
}else{
dateString=dateString.trim();if(dateString.length() ==DATE.length()){return dateString +ZERO_TIME;
}else if(dateString.length() ==DATE_TIME_HOURS.length()){return dateString +ZERO_TIME_WITHOUT_HOURS;
}else if(dateString.length() ==DATE_TIME_MINUTES.length()){return dateString +ZERO_TIME_WITHOUT_MINUTES;
}else if(dateString.length() ==DATE_TIME_MILLION.length()){return dateString.substring(0, DATE_TIME.length());
}else{returndateString;
}
}
}/*** 将日期格式转换成时间(时分秒毫秒)格式
*@paramdateString 日期字符串
*@return
*/
public staticString dateToDateTimeMillion(String dateString){if(StringUtils.isBlank(dateString)){return "";
}else{
dateString=dateString.trim();return dateString +ZERO_TIME_MILLION;
}
}/*** 将时间字(yyyy-MM-dd HH:mm:ss)符串转换成日期(yyyy-MM-dd)格式
*@paramdateTimeString 时间字符串
*@returnString*/
public staticString dateTimeToDate(String dateTimeString){if(StringUtils.isBlank(dateTimeString)){return "";
}else{
dateTimeString=dateTimeString.trim();if(dateTimeString.length() >=DATE.length()){return dateTimeString.substring(0, DATE.length());
}else{returndateTimeString;
}
}
}/*** 将时间(yyyy-MM-dd HH:mm:ss)转换成日期(yyyy-MM-dd)
*@paramdateTime 时间
*@returnDate
*@throwsParseException*/
public static Date dateTimeToDate(Date dateTime) throwsParseException{if(dateTime == null){return null;
}else{returnparseDate(formatDate(dateTime));
}
}/*** 获取当前时间(yyyy-MM-dd HH:mm:ss)
*@returnDate*/
public staticDate now(){return newDate();
}/*** 获取当前时间(yyyy-MM-dd HH:mm:ss)
*@returnDate*/
public staticDate dateTime(){return newDate();
}/*** 获取当前时间(yyyy-MM-dd HH:mm:ss)
*@returnDate*/
public staticDate getDateTime(){returndateTime();
}/*** 获取当前日期(yyyy-MM-dd)
*@returnDate
*@throwsParseException*/
public static Date date() throwsParseException{return dateTimeToDate(newDate());
}/*** 获取当前日期(yyyy-MM-dd)
*@returnDate
*@throwsParseException*/
public static Date getDate() throwsParseException{returndate();
}/*** 日期加减天数
*@paramdate 日期,为空时默认当前时间,包括时分秒
*@paramdays 加减的天数
*@return*@throwsParseException*/
public static Date dateAdd(Date date, int days) throwsParseException{if(date == null){
date= newDate();
}
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days);returncal.getTime();
}/*** 日期加减多少月
*@paramdate 日期,为空时默认当前时间,包括时分秒
*@parammonths 加减的月数
*@return*@throwsParseException*/
public static Date monthAdd(Date date, int months) throwsParseException{if(date == null){
date= newDate();
}
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, months);returncal.getTime();
}/*** 时间比较
*
如果date大于compareDate返回1,小于返回-1,相等返回0
*@paramdate
*@paramcompareDate
*@return*@throwsParseException*/
public static int dateCompare(Date date, Date compareDate) throwsParseException{
Calendar cal=Calendar.getInstance();
Calendar compareCal=Calendar.getInstance();
cal.setTime(date);
compareCal.setTime(date);returncal.compareTo(compareCal);
}/*** 获取两个日期相差的天数,不包含今天
*@paramstartDate
*@paramendDate
*@return*@throwsParseException*/
public static int dateBetween(Date startDate, Date endDate) throwsParseException{
Date dateStart=parse(format(startDate, DATE), DATE);
Date dateEnd=parse(format(endDate, DATE), DATE);return (int)((dateEnd.getTime() - dateStart.getTime()) / 1000/60/60/24);
}/*** 获取两个日期相差的天数,包含今天
*@paramstartDate
*@paramendDate
*@return*@throwsParseException*/
public static int dateBetweenIncludeToday(Date startDate, Date endDate) throwsParseException{return dateBetween(startDate, endDate) + 1;
}
@SuppressWarnings("unused")public static void main(String[] args) throwsException {//System.out.println(dateToDatetime("2018-08-17"));//System.out.println(dateToDatetimeMillion("2018-08-17"));
Date date = newDate();//System.out.println(parse("2018-08-17", null));//System.out.println(parseDate("2018-08-17"));//System.out.println(parseDate("2018-08-17 11:40"));//System.out.println(parseDateTime("2018-08-17 11:40"));//System.out.println(parseDateTime("2018-08-17 11:40:20"));//System.out.println(parseDateTime("2018-08-17 11:40:20:169"));//System.out.println(format(parseDateTime("2018-08-17 11:40:20:069"), DATE_TIME_MILLION));//System.out.println(format(date, null));//System.out.println(formatDate(date));//System.out.println(formatDateTime(date));//System.out.println(dateTimeToDate("2018-08-17 11:40"));//System.out.println(dateTimeToDate("2018-08-17"));//System.out.println(dateTimeToDate("2018-08-17 11"));//System.out.println(dateTimeToDate(date));//System.out.println(formatDate(dateTimeToDate(date)));//System.out.println(formatDateTime(dateTimeToDate(date)));
/*System.out.println(dateToDateTime("2018-08-17"));
System.out.println(dateToDateTime("2018-08-17 12"));
System.out.println(dateToDateTime("2018-08-17 13:10"));
System.out.println(dateToDateTime("2018-08-17 14:10:20"));
System.out.println(dateToDateTime("2018-08-17 15:10:20:158"));*/System.out.println(monthAdd(null, 12));
}
}