关于日期惯用操作工具类

关于日期常用操作工具类
public class DateUtils {   
	  
    /**  
     * 获取当前时间日期的字符串   
     */  
    public static String getCurrentDateStr(DateFormatType dateFormatType) {   
        Date date = getCurrentDate();   
        return (String) OpearationDate(date, dateFormatType.getValue());   
    }   
  
    /**  
     * 时间、日期格式化成字符串  
     */  
    public static String formatDate(Date date, DateFormatType dateFormatType) {   
        return (String) OpearationDate(date, dateFormatType.getValue());   
    }   
  
    /**  
     * 从字符串解析成时间、日期  
     */  
    public static Date parseDate(String dateStr, DateFormatType dateFormatType) {   
        return (Date) OpearationDate(dateStr, dateFormatType.getValue());   
    }   
  
    /**  
     * 获取当前系统时间(原始格式)  
     */  
    public static Date getCurrentDate() {   
        Date date = new Date(System.currentTimeMillis());   
        return date;   
    }   
  
    /**  
     * 获取当前日期的年、月、日、时、分、秒  
     */  
    public static int getCurrentTime(TimeFormatType timeFormatType) {   
        return getTime(getCurrentDate(), timeFormatType);   
    }   
  
    /**  
     * 获取指定日期的年、月、日、时、分、秒  
     */  
    public static int getTime(Date date, TimeFormatType timeFormatType) {   
        try {   
            Calendar c = Calendar.getInstance();   
            c.setTime(date);   
            int type = timeFormatType.getValue();   
            int i = c.get(type);   
            return type == 2 ? i + 1 : i;   
        } catch (Exception e) {   
            throw new RuntimeException("获取失败", e);   
        }   
    }   
  
    /**  
     * 获取指定日期的毫秒数  
     */  
    public static long getMillis(Date date) {   
        java.util.Calendar c = java.util.Calendar.getInstance();   
        c.setTime(date);   
        return c.getTimeInMillis();   
    }   
  
    /**  
     * 日期相加、减操作  
     *   
     * 所返回结果单位为:天数  
     */  
    public static int operationDate(Date date, Date diffDate, DateOperationType dateOperationType) {   
        long add = getMillis(date) + getMillis(diffDate);   
        long diff = getMillis(date) - getMillis(diffDate);   
        return (int) ((dateOperationType.getValue() ? add : diff) / (24 * 3600 * 1000));   
    }   
  
    /**  
     * 日期月份相加、减操作  
     */  
    public static Date operationDateOfMonth(Date date, int month, DateOperationType dateOperationType) {   
        Calendar c = Calendar.getInstance();   
        c.setTime(date);   
        c.add(Calendar.MONTH, dateOperationType.getValue() ? month : month - (month * 2));   
        return c.getTime();   
    }   
  
    /**  
     * 日期天数相加、减操作  
     */  
    public static Date operationDateOfDay(Date date, int day, DateOperationType dateOperationType) {   
        Calendar c = Calendar.getInstance();   
        c.setTime(date);   
        long millis = c.getTimeInMillis();   
        long millisOfday = day * 24 * 3600 * 1000;   
        long sumMillis = dateOperationType.getValue() ? (millis + millisOfday) : (millis - millisOfday);   
        c.setTimeInMillis(sumMillis);   
        return c.getTime();   
    }   
  
    private static Object OpearationDate(Object object, String formatStr) {   
        if (object == null || null == formatStr || "".equals(formatStr)) {   
            throw new RuntimeException("参数不能为空");   
        }   
        SimpleDateFormat format = new SimpleDateFormat(formatStr);   
        try {   
            if (object instanceof Date)   
                return format.format(object);   
            else  
                return format.parse(object.toString());   
        } catch (Exception e) {   
            throw new RuntimeException("操作失败", e);   
        }   
  
    }   
  
    public enum DateOperationType {   
  
        /**  
         * 加操作  
         */  
        ADD(true),   
  
        /**  
         * 减操作  
         */  
        DIFF(false);   
  
        private final boolean value;   
  
        DateOperationType(boolean operation) {   
            this.value = operation;   
        }   
  
        public boolean getValue() {   
            return value;   
        }   
    }   
  
    public enum TimeFormatType {   
  
        YEAR(1), MONTH(2), DAY(5), HOUR(11), MINUTE(12), SECOND(13);   
        private final int value;   
  
        TimeFormatType(int formatStr) {   
            this.value = formatStr;   
        }   
  
        public int getValue() {   
            return value;   
        }   
    }   
  
    public enum DateFormatType {   
        /**  
         * 格式为:yyyy-MM-dd HH:mm:ss  
         */  
        DATE_FORMAT_STR("yyyy-MM-dd HH:mm:ss"),   
        /**  
         * 格式为:yyyyMMddHHmmss  
         */  
        SIMPLE_DATE_TIME_FORMAT_STR("yyyyMMddHHmmss"),   
  
        /**  
         * 格式为:yyyy-MM-dd  
         */  
        SIMPLE_DATE_FORMAT_STR("yyyy-MM-dd"),   
  
        /**  
         * 格式为:yyyy/MM/dd  
         */  
        SIMPLE_DATE_FORMAT_VIRGULE_STR("yyyy/MM/dd"),   
  
        /**  
         * 格式为:HH:mm:ss  
         */  
        HOUR_MINUTE_SECOND("HH:mm:ss"),   
  
        /**  
         * 格式为:HH:mm  
         */  
        HOUR_MINUTE("HH:mm");   
  
        private final String value;   
  
        DateFormatType(String formatStr) {   
            this.value = formatStr;   
        }   
  
        public String getValue() {   
            return value;   
        }   
    }   
}