时间忽略类型转换及比对工具类

可忽略传入类型进行比对,例:eq(String dateStr,Date date)

一应代码皆有注释,不做赘述


import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName : DateUtil
 * @Description : 时间工具类
 * @Author : syf
 * @Date: 2020-08-13 11:22
 */
public class DateUtil {
     

    private Date date;

    private String format;

    /**
     * 时间格式 [yyyy-MM-dd]
     */
    public static final String DATE = "yyyy-MM-dd";

    /**
     * 时间格式 [yyyyMMdd]
     */
    public static final String DATE_COMPACT = "yyyyMMdd";

    /**
     * 时间格式 [yyyy_MM_dd]
     */
    public static final String DATE_UNDERLINE = "yyyy_MM_dd";

    /**
     * 时间格式 [HH:mm:ss]
     */
    public static final String TIME = "HH:mm:ss";

    /**
     * 时间格式 [HHmmss]
     */
    public static final String TIME_COMPACT = "HHmmss";

    /**
     * 时间格式 [HH_mm_ss]
     */
    public static final String TIME_UNDERLINE = "HH_mm_ss";

    /**
     * 时间格式 [HH:mm:ss.SSS]
     */
    public static final String TIME_MILLI = "HH:mm:ss.SSS";

    /**
     * 时间格式 [HHmmssSSS]
     */
    public static final String TIME_MILLI_COMPACT = "HHmmssSSS";

    /**
     * 时间格式 [HH_mm_ss_SSS]
     */
    public static final String TIME_MILLI_UNDERLINE = "HH_mm_ss_SSS";

    /**
     * 时间格式 [yyyy-MM-dd HH:mm:ss]
     */
    public static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";

    /**
     * 时间格式 [yyyyMMddHHmmss]
     */
    public static final String DATE_TIME_COMPACT = "yyyyMMddHHmmss";

    /**
     * 时间格式 [yyyy_MM_dd_HH_mm_ss]
     */
    public static final String DATE_TIME_UNDERLINE = "yyyy_MM_dd_HH_mm_ss";

    /**
     * 时间格式 [yyyy-MM-dd HH:mm:ss.SSS]
     */
    public static final String DATE_TIME_MILLI = "yyyy-MM-dd HH:mm:ss.SSS";

    /**
     * 时间格式 [yyyyMMddHHmmssSSS]
     */
    public static final String DATE_TIME_MILLI_COMPACT = "yyyyMMddHHmmssSSS";

    /**
     * 时间格式 [yyyy_MM_dd_HH_mm_ss_SSS]
     */
    public static final String DATE_TIME_MILLI_UNDERLINE = "yyyy_MM_dd_HH_mm_ss_SSS";

    /**
     * 时间格式 [yyyy]
     */
    public static final String YER = "yyyy";


    /**
     * 时间格式 [MM]
     */
    public static final String MONTH = "MM";


    /**
     * 时间格式 [dd]
     */
    public static final String DAY = "dd";

    /**
     * 时间格式 [HH]
     */
    public static final String HOUR = "HH";

    /**
     * 时间格式 [mm]
     */
    public static final String MINUTE = "mm";

    /**
     * 时间格式 [ss]
     */
    public static final String SECOND = "ss";

    /**
     * 时间格式 [SSS]
     */
    public static final String MS = "SSS";

    /**
     * 创建一个当前时间的DateUtil
     */
    public DateUtil() {
     
        this.date = new Date();
        this.format = DATE_TIME;
    }

    /**
     * 传入指定时间创建DateUtil
     *
     * @param date
     */
    public DateUtil(Date date) {
     
        this.date = date;
        this.format = DATE_TIME;
    }

    /**
     * 传入指定时间字符串(格式为: yyyy-MM-dd HH:mm:ss),创建一个指定时间的DateUtil
     *
     * @param date
     */
    public DateUtil(String date) {
     
        SimpleDateFormat simple = new SimpleDateFormat(DATE_TIME);
        try {
     
            this.date = simple.parse(date);
            this.format = DATE_TIME;
        } catch (Exception e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 传入时间字符串及对应的时间格式字符串,创建一个指定时间的DateUtil
     *
     * @param date   时间字符串
     * @param format 对应的时间格式字符串
     */
    public DateUtil(String date, String format) {
     
        SimpleDateFormat simple = new SimpleDateFormat(format);
        try {
     
            this.date = simple.parse(date);
            this.format = format;
        } catch (Exception e) {
     
            e.printStackTrace();
        }
    }

    /**
     * 传入时间字符串及对应的时间格式字符串,创建一个指定时间的DateUtil
     *
     * @param date   时间字符串
     * @param format 对应的时间格式字符串
     */
    public DateUtil(Date date, String format) {
     
        this.date = date;
        this.format = format;
    }

    /**
     * 获取创建的时间
     *
     * @return 时间类型
     */
    public Date getDateTime() {
     
        return this.date;
    }

    /**
     * 获取指定时间格式的时间
     *
     * @param format 指定的时间格式
     * @return
     */
    public String getDateTime(String format) {
     
        SimpleDateFormat simple = new SimpleDateFormat(format);
        return simple.format(this.date);
    }

    /**
     * 判断创建的DateUtil的时间是否大于当前时间
     *
     * @return (DateUtil.getDate () > new Date()) == true
     */
    public boolean gt() {
     
        if (this.date.after(new Date())) {
     
            return true;
        }
        return false;
    }

    /**
     * 判断创建的DateUtil的时间是否大于传入时间
     *
     * @param date 传入的时间
     * @return (DateUtil.getDate () > date) == true
     */
    public boolean gt(Date date) {
     
        if (this.date.after(date)) {
     
            return true;
        }
        return false;
    }

    /**
     * 判断创建的DateUtil的时间是否大于传入时间
     *
     * @param date 传入的时间(字符串格式)
     * @return (DateUtil.getDate () > date) == true
     */
    public boolean gt(String date) {
     
        SimpleDateFormat simple = new SimpleDateFormat(this.format);
        Date date1 = null;
        try {
     
            date1 = simple.parse(date);
        } catch (Exception e) {
     
            return false;
        }
        if (this.date.after(date1)) {
     
            return true;
        }
        return false;
    }

    /**
     * 判断创建的DateUtil的时间是否小于当前时间
     *
     * @return (DateUtil.getDate () < new Date()) == true
     */
    public boolean lt() {
     
        if (this.date.before(new Date())) {
     
            return true;
        }
        return false;
    }

    /**
     * 判断创建的DateUtil的时间是否小于传入时间
     *
     * @param date 传入的时间
     * @return (DateUtil.getDate () < date) == true
     */
    public boolean lt(Date date) {
     
        if (this.date.before(date)) {
     
            return true;
        }
        return false;
    }

    /**
     * 判断创建的DateUtil的时间是否小于传入时间
     *
     * @param date 传入的时间(字符串格式)
     * @return (DateUtil.getDate () < date) == true
     */
    public boolean lt(String date) {
     
        SimpleDateFormat simple = new SimpleDateFormat(this.format);
        Date date1 = null;
        try {
     
            date1 = simple.parse(date);
        } catch (Exception e) {
     
            return false;
        }
        if (this.date.before(date1)) {
     
            return true;
        }
        return false;
    }


    /**
     * 判断创建的DateUtil的时间是否大于当前时间
     *
     * @return (DateUtil.getDate () > new Date()) == true
     */
    public boolean eq() {
     
        if (this.date.after(new Date())) {
     
            return false;
        }
        if (this.date.before(new Date())) {
     
            return false;
        }
        return true;
    }

    /**
     * 判断创建的DateUtil的时间是否大于传入时间
     *
     * @param date 传入的时间
     * @return (DateUtil.getDate () > date) == true
     */
    public boolean eq(Date date) {
     
        if (this.date.after(date)) {
     
            return false;
        }
        if (this.date.before(date)) {
     
            return false;
        }
        return true;
    }

    /**
     * 判断创建的DateUtil的时间是否大于传入时间
     *
     * @param date 传入的时间(字符串格式)
     * @return (DateUtil.getDate () > date) == true
     */
    public boolean eq(String date) {
     
        SimpleDateFormat simple = new SimpleDateFormat(this.format);
        Date date1 = null;
        try {
     
            date1 = simple.parse(date);
        } catch (Exception e) {
     
            return false;
        }
        if (this.date.after(date1)) {
     
            return false;
        }
        if (this.date.before(date1)) {
     
            return false;
        }
        return true;
    }

    /**
     * 时间类型字符串转换成时间
     *
     * @param date 时间字符串(格式: yyyy-MM-dd HH:mm:ss)
     * @return
     */
    public static Date convertDate(String date) {
     
        return new DateUtil(date).getDateTime();
    }

    /**
     * 时间类型字符串转换成时间
     *
     * @param date   时间字符串
     * @param format 时间格式
     * @return
     */
    public static Date convertDate(String date, String format) {
     
        return new DateUtil(date, format).getDateTime();
    }

    /**
     * 获取指定格式的指定时间
     *
     * @param date   时间
     * @param format 指定的时间格式
     * @return 与传入时间格式相符的时间字符串
     */
    public static String getFormatDate(Date date, String format) {
     
        return new DateUtil(date).getDateTime(format);
    }

    /**
     * 获取当前时间 (格式: yyyy-MM-dd HH:mm:ss)
     *
     * @return
     */
    public static String getFormatNow() {
     
        return new DateUtil().getDateTime(DATE_TIME);
    }

    /**
     * 获取指定格式的当前时间
     *
     * @param format 指定的时间格式
     * @return
     */
    public static String getFormatNow(String format) {
     
        return new DateUtil().getDateTime(format);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 > date2) == true
     */
    public static boolean gt(Date date1, String date2) {
     
        return new DateUtil(date1).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 > date2) == true
     */
    public static boolean gt(String date1, Date date2) {
     
        return new DateUtil(date1).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 > date2) == true
     */
    public static boolean gt(Date date1, Date date2) {
     
        return new DateUtil(date1).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 > date2) == true
     */
    public static boolean gt(String date1, String date2) {
     
        return new DateUtil(date1).gt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 < date2) == true
     */
    public static boolean lt(Date date1, String date2) {
     
        return new DateUtil(date1).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 < date2) == true
     */
    public static boolean lt(String date1, Date date2) {
     
        return new DateUtil(date1).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 < date2) == true
     */
    public static boolean lt(Date date1, Date date2) {
     
        return new DateUtil(date1).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 < date2) == true
     */
    public static boolean lt(String date1, String date2) {
     
        return new DateUtil(date1).lt(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 = = date2) == true
     */
    public static boolean eq(Date date1, String date2) {
     
        return new DateUtil(date1).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 = = date2) == true
     */
    public static boolean eq(String date1, Date date2) {
     
        return new DateUtil(date1).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 = = date2) == true
     */
    public static boolean eq(Date date1, Date date2) {
     
        return new DateUtil(date1).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1 时间一
     * @param date2 时间二
     * @return (date1 = = date2) == true
     */
    public static boolean eq(String date1, String date2) {
     
        return new DateUtil(date1).eq(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 > date2) == true
     */
    public static boolean gt(Date date1, String date2, String format) {
     
        return new DateUtil(date1, format).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 > date2) == true
     */
    public static boolean gt(String date1, Date date2, String format) {
     
        return new DateUtil(date1, format).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 > date2) == true
     */
    public static boolean gt(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, format).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 > date2) == true
     */
    public static boolean gt(String date1, String date2, String format) {
     
        return new DateUtil(date1, format).gt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 < date2) == true
     */
    public static boolean lt(Date date1, String date2, String format) {
     
        return new DateUtil(date1, format).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 < date2) == true
     */
    public static boolean lt(String date1, Date date2, String format) {
     
        return new DateUtil(date1, format).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 < date2) == true
     */
    public static boolean lt(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, format).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 < date2) == true
     */
    public static boolean lt(String date1, String date2, String format) {
     
        return new DateUtil(date1, format).lt(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 = = date2) == true
     */
    public static boolean eq(Date date1, String date2, String format) {
     
        return new DateUtil(date1, format).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 = = date2) == true
     */
    public static boolean eq(String date1, Date date2, String format) {
     
        return new DateUtil(date1, format).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 = = date2) == true
     */
    public static boolean eq(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, format).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式
     * @return (date1 = = date2) == true
     */
    public static boolean eq(String date1, String date2, String format) {
     
        return new DateUtil(date1, format).eq(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 > date2) == true
     */
    public static boolean gtByChinese(Date date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 > date2) == true
     */
    public static boolean gtByChinese(String date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 > date2) == true
     */
    public static boolean gtByChinese(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).gt(date2);
    }

    /**
     * 判断时间一是否大于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 > date2) == true
     */
    public static boolean gtByChinese(String date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).gt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 < date2) == true
     */
    public static boolean ltByChinese(Date date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 < date2) == true
     */
    public static boolean ltByChinese(String date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 < date2) == true
     */
    public static boolean ltByChinese(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).lt(date2);
    }

    /**
     * 判断时间一是否小于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 < date2) == true
     */
    public static boolean ltByChinese(String date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).lt(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 = = date2) == true
     */
    public static boolean eqByChinese(Date date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 = = date2) == true
     */
    public static boolean eqByChinese(String date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 = = date2) == true
     */
    public static boolean eqByChinese(Date date1, Date date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).eq(date2);
    }

    /**
     * 判断时间一是否等于时间二
     *
     * @param date1  时间一
     * @param date2  时间二
     * @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
     * @return (date1 = = date2) == true
     */
    public static boolean eqByChinese(String date1, String date2, String format) {
     
        return new DateUtil(date1, getFormat(format)).eq(date2);
    }

    /**
     * 时间类型字符串转换成时间
     *
     * @param date   时间字符串
     * @param format 时间格式(中文格式,例: 年-月-日 时:分:秒)
     * @return
     */
    public static Date convertDateByChinese(String date, String format) {
     
        return new DateUtil(date, getFormat(format)).getDateTime();
    }

    /**
     * 获取指定格式的指定时间
     *
     * @param date   时间
     * @param format 指定的时间格式(中文格式,例: 年-月-日 时:分:秒)
     * @return 与传入时间格式相符的时间字符串
     */
    public static String getFormatDateByChinese(Date date, String format) {
     
        return new DateUtil(date).getDateTime(getFormat(format));
    }

    /**
     * 获取指定格式的当前时间
     *
     * @param format 指定的时间格式(中文格式,例: 年-月-日 时:分:秒)
     * @return
     */
    public static String getFormatNowByChinese(String format) {
     
        return new DateUtil().getDateTime(getFormat(format));
    }

    /**
     * 私有方法,对时间格式进行转换
     *
     * @param format
     * @return
     */
    private static String getFormat(String format) {
     
        return format.replaceFirst("年", YER).replaceFirst("月", MONTH)
                .replaceFirst("日", DAY).replaceFirst("时", HOUR)
                .replaceFirst("分", MINUTE).replaceFirst("秒", SECOND)
                .replaceFirst("毫秒", MS);
    }

}

注:所有以ByChinese结尾的方法,传入的参数需使用汉字代替原有时间格式,例如:
原时间格式: “yyyy-MM-dd” 可以写成 “年-月-日”
原时间格式: “yyyy年MM月dd日” 可以写成 "年年月月日日"

主要用于忘记时间格式时,再去到处扒拉,麻烦

你可能感兴趣的:(工具类,java)