日期处理工具

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

}

 

posted @ 2019-04-03 18:19  迷失之路  阅读(220)  评论(0编辑  收藏  举报