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); } }