import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.springframework.util.StringUtils;
/**
* 日期处理工具
*/
public class DateUtil {
/*********************************************************************************************/
/****************************************** 日期的解析 ********************************************/
/*********************************************************************************************/
// 常用时间格式
private static String yyyyMMdd = "yyyyMMdd";
private static String yyyyMMddHHmmss = "yyyyMMddHHmmss";
private static String yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
/**
* 解析时间
*
* @param formatDate 需要解析的格式化的时间串
* @return
*/
public static Date parseDate(String formatDate) throws ParseException {
if (null != formatDate && !"".equals(formatDate)) {
// 清除日期串中的非数字部分
formatDate = formatDate.replaceAll("\\D", "");
// 根据日期串的不同长度,初始化不同的解析工具
SimpleDateFormat sdf = null;
if (formatDate.length() == yyyyMMdd.length()) {
sdf = new SimpleDateFormat(yyyyMMdd);
}
if (formatDate.length() == yyyyMMddHHmmss.length()) {
sdf = new SimpleDateFormat(yyyyMMddHHmmss);
}
if (formatDate.length() == yyyyMMddHHmmssSSS.length()) {
sdf = new SimpleDateFormat(yyyyMMddHHmmssSSS);
}
// 纯数字日期的解析
if (null != sdf) {
return sdf.parse(formatDate);
}
}
return null;
}
/*********************************************************************************************/
/****************************************** 日期的计算 ********************************************/
/*********************************************************************************************/
public static Date addYears(Date date, Integer years) {
return dateCalculate(date, years, null, null, null, null, null, null);
}
public static Date addMonths(Date date, Integer months) {
return dateCalculate(date, null, months, null, null, null, null, null);
}
public static Date addDays(Date date, Integer days) {
return dateCalculate(date, null, null, days, null, null, null, null);
}
public static Date addHours(Date date, Integer hours) {
return dateCalculate(date, null, null, null, hours, null, null, null);
}
public static Date addMinutes(Date date, Integer minutes) {
return dateCalculate(date, null, null, null, null, minutes, null, null);
}
public static Date addSeconds(Date date, Integer seconds) {
return dateCalculate(date, null, null, null, null, null, seconds, null);
}
public static Date addMilliseconds(Date date, Integer milliseconds) {
return dateCalculate(date, null, null, null, null, null, null, milliseconds);
}
/**
* 日期的计算
*
* @param date 要计算的日期
* @param years 需要在date上增加的年数
* @param months 需要在date上增加的月数
* @param days 需要在date上增加的天数
* @param hours 需要在date上增加的小时数
* @param minutes 需要在date上增加的分钟数
* @param seconds 需要在date上增加的秒数
* @param milliseconds 需要在date上增加的豪秒数
* @return
*/
public static Date dateCalculate(Date date, Integer years, Integer months, Integer days, Integer hours,
Integer minutes, Integer seconds, Integer milliseconds) {
// 日期无法计算的情况
if (null == date) {
return null;
}
// 日期可以计算的情况
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if (null != years) {
calendar.add(Calendar.YEAR, years);
}
if (null != months) {
calendar.add(Calendar.MONTH, months);
}
if (null != days) {
calendar.add(Calendar.DAY_OF_MONTH, days);
}
if (null != hours) {
calendar.add(Calendar.HOUR_OF_DAY, hours);
}
if (null != minutes) {
calendar.add(Calendar.MINUTE, minutes);
}
if (null != seconds) {
calendar.add(Calendar.SECOND, seconds);
}
if (null != milliseconds) {
calendar.add(Calendar.MILLISECOND, milliseconds);
}
// 返回计算完毕后的数据
return calendar.getTime();
}
/*********************************************************************************************/
/****************************************** 日期的格式化 ******************************************/
/*********************************************************************************************/
/**
* 日期格式化
*
* @param date 需要格式化的日期
* @return 使用默认日期格式,格式化后的日期
*/
public static String format(Date date) {
return format(date, null);
}
/**
* 日期格式化
*
* @param date 需要格式化的日期
* @param format 日期的格式, 未设置时, 使用默认日期格式
* @return 格式化后的日期
*/
public static String format(Date date, String format) {
if (StringUtils.isEmpty(format)) {
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
}