日期格式化工具类

写了一个比较全面的日期工具类

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 日期工具类
 *
 * @author luoxiang
 * @version 2017-04-23
 */
public class DateUtils {

    // 斜杠:slash
    public static final String SLASH_DATE = "yyyy/MM/dd";
    public static final String SLASH_DATETIME = "yyyy/MM/dd HH:mm:ss";
    public static final String SLASH_DATETIME_DETAIL = "yyyy/MM/dd HH:mm:ss SSS";

   // 拼接:joint
    public static final String JOINT_DATE = "yyyyMMdd";
    public static final String JOINT_DATETIME = "yyyyMMddHHmmss";
    public static final String JOINT_DATETIME_DETAIL = "yyyyMMddHHmmssSSS";

    // 连字符:hyphens(默认格式)
    public static final String HYPHENS_DATE = "yyyy-MM-dd";
    public static final String HYPHENS_DATETIME = "yyyy-MM-dd HH:mm:ss";
    public static final String HYPHENS_DATETIME_DETAIL = "yyyy-MM-dd HH:mm:ss SSS";

    /**
     * ********************** Date -> String [BEGIN] ***********************
     */

    /**
     * 按指定格式格式化当前日期
     */
    public static String format(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }

    /**
     * 格式化当前日期,格式:yyyy-MM-dd
     */
    public static String formatCurrentDate() {
        return DateFormatUtils.format(new Date(), HYPHENS_DATE);
    }

    /**
     * 格式化当前日期时间,格式:yyyy-MM-dd HH:mm:ss
     */
    public static String formatCurrentDatetime() {
        return DateFormatUtils.format(new Date(), HYPHENS_DATETIME);
    }

    /**
     * 格式化当前日期时间(包含毫秒),格式:yyyy-MM-dd HH:mm:ss SSS
     */
    public static String formatCurrentDatetimeDetail() {
        return DateFormatUtils.format(new Date(), HYPHENS_DATETIME_DETAIL);
    }

    /**
     * 格式化日期,格式:yyyy-MM-dd
     */
    public static String formatDate(Date date) {
        return DateFormatUtils.format(date, HYPHENS_DATE);
    }

    /**
     * 格式化日期时间,格式:yyyy-MM-dd HH:mm:ss
     */
    public static String formatDatetime(Date date) {
        return DateFormatUtils.format(date, HYPHENS_DATETIME);
    }

    /**
     * 格式化日期时间(包含毫秒),格式:yyyy-MM-dd HH:mm:ss SSS
     */
    public static String formatDatetimeDetail(Date date) {
        return DateFormatUtils.format(date, HYPHENS_DATETIME_DETAIL);
    }

    /**
     * 格式化当前日期,格式:yyyyMMdd
     */
    public static String formatCurrentDateUseJoint() {
        return DateFormatUtils.format(new Date(), JOINT_DATE);
    }

    /**
     * 格式化当前日期时间,格式:yyyyMMddHHmmss
     */
    public static String formatCurrentDatetimeUseJoint() {
        return DateFormatUtils.format(new Date(), JOINT_DATETIME);
    }

    /**
     * 格式化当前日期时间(包含毫秒),格式:yyyyMMddHHmmssSSS
     */
    public static String formatCurrentDatetimeDetailUseJoint() {
        return DateFormatUtils.format(new Date(), JOINT_DATETIME_DETAIL);
    }

    /**
     * 格式化日期,格式:yyyyMMdd
     */
    public static String formatDateUseJoint(Date date) {
        return DateFormatUtils.format(date, JOINT_DATE);
    }

    /**
     * 格式化日期时间,格式:yyyyMMddHHmmss
     */
    public static String formatDatetimeUseJoint(Date date) {
        return DateFormatUtils.format(date, JOINT_DATETIME);
    }

    /**
     * 格式化日期时间(包含毫秒),格式:yyyyMMddHHmmssSSS
     */
    public static String formatDatetimeDetailUseJoint(Date date) {
        return DateFormatUtils.format(date, JOINT_DATETIME_DETAIL);
    }

    /** *********************** Date -> String [END] *********************** */

    /**
     * ********************** String -> Date [BEGIN] ***********************
     */
    public static Date parse(String datetime, String pattern) {
        try {
            return org.apache.commons.lang3.time.DateUtils.parseDate(datetime, pattern);
        } catch (ParseException e) {
            throw new IllegalArgumentException(e.getMessage(), e);
        }
    }

    /**
     * 将字符串日期转换成Date类型,字符串格式:yyyy-MM-dd
     */
    public static Date parseDate(String date) {
        return parse(date, HYPHENS_DATE);
    }

    /**
     * 校验日期字符串是否合法,合法字符串格式:yyyy-MM-dd
     */
    public static boolean validDate(String date) {
        try {
            parseDate(date);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /**
     * 将字符串日期转换成Date类型,字符串格式:yyyy-MM-dd HH:mm:ss
     */
    public static Date parseDatetime(String datetime) {
        return parse(datetime, HYPHENS_DATETIME);
    }

    /**
     * 校验日期时间字符串是否合法,合法格式:yyyy-MM-dd HH:mm:ss
     */
    public static boolean validDatetime(String datetime) {
        try {
            parseDatetime(datetime);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /**
     * 将字符串日期(含毫秒)转换成Date类型,字符串格式:yyyy-MM-dd HH:mm:ss SSS
     */
    public static Date parseDatetimeDetail(String datetimeDetail) {
        return parse(datetimeDetail, HYPHENS_DATETIME_DETAIL);
    }

    /**
     * 校验日期时间字符串(含毫秒)是否合法,合法格式:yyyy-MM-dd HH:mm:ss SSS
     */
    public static boolean validDatetimeDetail(String datetimeDetail) {
        try {
            parseDatetimeDetail(datetimeDetail);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /**
     * 将字符串日期转换成Date类型,字符串格式:yyyyMMdd
     */
    public static Date parseDateUseJoint(String date) {
        return parse(date, JOINT_DATE);
    }

    /**
     * 校验日期字符串是否合法,合法字符串格式:yyyyMMdd
     */
    public static boolean validDateUseJoint(String date) {
        try {
            parseDateUseJoint(date);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /**
     * 将字符串日期转换成Date类型,字符串格式:yyyyMMddHHmmss
     */
    public static Date parseDatetimeUseJoint(String datetime) {
        return parse(datetime, JOINT_DATETIME);
    }

    /**
     * 校验日期时间字符串是否合法,合法格式:yyyyMMddHHmmss
     */
    public static boolean validDatetimeUseJoint(String datetime) {
        try {
            parseDatetimeUseJoint(datetime);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /**
     * 将字符串日期(含毫秒)转换成Date类型,字符串格式:yyyyMMddHHmmssSSS
     */
    public static Date parseDatetimeDetailUseJoint(String datetimeDetail) {
        return parse(datetimeDetail, JOINT_DATETIME_DETAIL);
    }

    /**
     * 校验日期时间字符串(含毫秒)是否合法,合法格式:yyyyMMddHHmmssSSS
     */
    public static boolean validDatetimeDetailUseJoint(String datetimeDetail) {
        try {
            parseDatetimeDetailUseJoint(datetimeDetail);
            return Boolean.TRUE;
        } catch (Exception e) {
            return Boolean.FALSE;
        }
    }

    /** *********************** String -> Date [END] *********************** */

    /**
     * ********************** OTHER [BEGIN] ***********************
     */
    public static Date parseAuto(String source) {
        if (StringUtils.isBlank(source)) {
            return null;
        }

        try {
            if (source.indexOf('-') > 0) {// 以"-"分隔
                if (source.indexOf(':') > 0) {
                    return parse(source, HYPHENS_DATETIME);
                } else {
                    return parse(source, HYPHENS_DATE);
                }
            }

            if (source.indexOf('/') > 0) {// 以"/"分隔
                if (source.indexOf(':') > 0) {
                    return parse(source, SLASH_DATETIME);
                } else {
                    return parse(source, SLASH_DATE);
                }
            }

            try {
                return parse(source, JOINT_DATETIME);
            } catch (Exception e) {
                return parse(source, JOINT_DATE);
            }

        } catch (Throwable e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.getMessage());
        }
    }

    /**
     * 在指定时间上增加年份
     */
    public static Date addYear(Date date, int amount) {
        Calendar c = new GregorianCalendar();
        c.setTime(date);
        c.add(Calendar.YEAR, amount);
        return c.getTime();
    }
    
    /**  
     * 计算两个日期之间相差的天数  
     * @param smdate 较小的时间 
     * @param bdate  较大的时间 
     * @return 相差天数 
     * @throws ParseException  
     */    
    public static int daysBetween(Date smdate,Date bdate)    
    {    
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
        try {
            smdate=sdf.parse(sdf.format(smdate));
        } catch (ParseException e) {
            e.printStackTrace();
             throw new IllegalArgumentException(e.getMessage());
        }  
        try {
            bdate=sdf.parse(sdf.format(bdate));
        } catch (ParseException e) {
            e.printStackTrace();
             throw new IllegalArgumentException(e.getMessage());
        }  
        Calendar cal = Calendar.getInstance();    
        cal.setTime(smdate);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(bdate);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600*24);  
            
       return Integer.parseInt(String.valueOf(between_days));           
    } 
    
    /**
     * 
    * @author luoxiang
    * @Title: getCurrentMonthLastDay 
    * @Description: 计算当前月最后一天的日期 
    * @param @return    设定文件 
    * @return Date    返回类型 
    * @throws
     */
    public static Date getCurrentMonthLastDay() {
        // 获取Calendar  
        Calendar calendar = Calendar.getInstance();  
        // 设置时间,当前时间不用设置  
        // calendar.setTime(new Date());  
        // 设置日期为本月最大日期  
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));  
        return calendar.getTime();
    }
    
    /**
     * 
    * @author luoxiang
    * @Title: getOtherDayDate 
    * @Description: 获取当前日前前后指定天数的日期 
    * @param @return    设定文件 
    * @return Date    返回类型 
    * @throws
     */
    public static Date getOtherDayDate(int i) {
        Date date = new Date();  
        Calendar c = Calendar.getInstance();  
        c.setTime(date);  
        c.add(Calendar.DATE, i);  
        return c.getTime();
    }
    
    /**
     * 
    * @author luoxiang
    * @Title: getOneDayDate 
    * @Description: 获取指定日期前后指定天数的日期 
    * @param @param Time
    * @param @param i
    * @param @return    设定文件 
    * @return Date    返回类型 
    * @throws
     */
    public static Date getOneDayDate(Date Time,int i) { 
        Calendar c = Calendar.getInstance();  
        c.setTime(Time);  
        c.add(Calendar.DATE, i);  
        return c.getTime();
    }
    
    /**
     * 
    * @author luoxiang
    * @Title: getCurrentYear 
    * @Description: 获取当前年份 
    * @param @return    设定文件 
    * @return int    返回类型 
    * @throws
     */
    public static int getCurrentYear() {
        Calendar cal = Calendar.getInstance();
        return  cal.get(Calendar.YEAR);
    }
    
    /**
     * 
    * @author luoxiang
    * @Title: getCurrentMonth 
    * @Description: 获取当前月份 
    * @param @return    设定文件 
    * @return int    返回类型 
    * @throws
     */
    public static int getCurrentMonth() {
        Calendar cal = Calendar.getInstance();
        return  cal.get(Calendar.MONTH) + 1;
    }
    
    /**
     * 获取当前
    * @author luoxiang
    * @Title: getCurrentDay 
    * @Description: 获取当前日期 
    * @param @return    设定文件 
    * @return int    返回类型 
    * @throws
     */
    public static int getCurrentDay() {
        Calendar cal = Calendar.getInstance();
        return  cal.get(Calendar.DATE);
    }
    
    /**
     * 
    * @author luoxiang
    * @Title: getCurrentFirstday 
    * @Description: 获取当前月第一天的日期 
    * @param @return    设定文件 
    * @return Date    返回类型 
    * @throws
     */
    public static Date getCurrentFirstday() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cale = Calendar.getInstance();
        cale.add(Calendar.MONTH, 0);
        cale.set(Calendar.DAY_OF_MONTH, 1);
        String firstday = format.format(cale.getTime());
        return DateUtils.parseDate(firstday);   
    } 

    /** *********************** OTHER [END] *********************** */
}

你可能感兴趣的:(java,n天后的日期,相差天数)