日期转化以及比较的工具类
  fBdBA9tXzLZY 2023年12月22日 24 0

开发过程中,我们经常会有日期转换不同格式以及日期之间做比较的业务场景,接下来是我自己写的一个日期小工具,希望可以帮助到大家,也希望大家可以留言指教。public class DateUtil {

/**
 * 1秒时长(毫秒)
 */
public static final long SECOND_MS = 1000L;

/**
 * 1分钟时长(毫秒)
 */
public static final long MINUTE_MS = 60 * SECOND_MS;

/**
 * 1小时时长(毫秒)
 */
public static final long HOUR_MS = 60 * MINUTE_MS;

/**
 * 1天时长(毫秒)
 */
public static final long DAY_MS = 24 * HOUR_MS;

/**
 * 1周时长(毫秒)
 */
public static final long WEEK_MS = 7 * DAY_MS;
/**
 * 年格式
 */
public static final String YEAR_PATTERN = "yyyy";
/**
 * 月格式
 */
public static final String MONTH_PATTERN = "MM";
/**
 * 日格式
 */
public static final String DAY_PATTERN = "dd";
/**
 * 小时格式
 */
public static final String HOUR_PATTERN = "HH";
/**
 * 分钟格式
 */
public static final String MINUTE_PATTERN = "mm";
/**
 * 秒格式
 */
public static final String SECOND_PATTERN = "ss";
/**
 * 毫秒格式
 */
public static final String MILLISECOND_PATTERN = "SSS";

/**
 * 时间格式枚举类
 */
@AllArgsConstructor
@Getter
public enum DatePatternEnum {

    /**
     * Date类型toString格式
     */
    DATE_STRING_PATTERN("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH),

    /**
     * 转换格式: 年-月-日 时:分:秒.毫秒
     */
    DATE_TIME_MILLISECOND_PATTERN("yyyy-MM-dd HH:mm:ss.SSS", Locale.CHINESE),
    /**
     * 转换格式: 年-月-日 时:分:秒
     */
    DATE_TIME_PATTERN("yyyy-MM-dd HH:mm:ss", Locale.CHINESE),
    /**
     * 转换格式: 年-月-日 时:分
     */
    DATE_MINUTE_PATTERN("yyyy-MM-dd HH:mm", Locale.CHINESE),
    /**
     * 转换格式: 月-日 时:分
     */
    MONTH_MINUTE_PATTERN("MM-dd HH:mm", Locale.CHINESE),
    /**
     * 转换格式: 年-月-日
     */
    DATE_PATTERN("yyyy-MM-dd", Locale.CHINESE),
    /**
     * 转换格式:年月日
     */
    YEAR_MONTH_DATE_PATTERN("yyyyMMdd",Locale.CHINESE),
    /**
     * 转换格式: 月-日
     */
    MONTH_PATTERN("MM-dd", Locale.CHINESE),
    /**
     * 转换格式: 年月日时分
     */
    DATE_HM_PATTERN("yyyyMMddHHmm", Locale.CHINESE),
    /**
     * 转换格式: 年月日时分秒
     */
    DATE_HMS_PATTERN("yyyyMMddHHmmss", Locale.CHINESE),
    /**
     * 转换格式: 时:分:秒
     */
    TIME_PATTERN("HH:mm:ss", Locale.CHINESE),
    /**
     * 转换格式:年月日(带中文)
     */
    DATE_PATTERN_CHINESE("yyyy年MM月dd日",Locale.CHINESE)
    ;

    private String pattern;

    private Locale locale;
}

/**
 * 时间常量类
 */
public interface DateConstant {
    /**
     * 获取年
     */
    int YEAR = Calendar.YEAR;
    /**
     * 获取月
     */
    int MONTH = Calendar.MONTH;
    /**
     * 获取日
     */
    int DAY = Calendar.DAY_OF_MONTH;
    /**
     * 获取小时
     */
    int HOUR = Calendar.HOUR_OF_DAY;

    /**
     * 获取分钟
     */
    int MINUTE = Calendar.MINUTE;
    /**
     * 获取秒钟
     */
    int SECOND = Calendar.SECOND;
    /**
     * 获取毫秒
     */
    int MILLISECOND = Calendar.MILLISECOND;
}

/**
 * 获取时间初始化实例
 *
 * @param formatting 初始化格式
 * @return
 */
public static SimpleDateFormat getSimpleDateFormat(String formatting) {
    return new SimpleDateFormat(formatting);
}

/**
 * 获取时间初始化实例
 *
 * @param formatting 初始化格式
 */
public static SimpleDateFormat getSimpleDateFormat(String formatting, Locale locale) {
    return new SimpleDateFormat(formatting, locale);
}

/**
 * 获取当前时间
 */
public static Date getDate() {
    return Calendar.getInstance().getTime();
}

/**
 * 获取指定格式当前时间
 */
@Deprecated
public static String getDate(String formatting) {
    return formatting(getDate(), formatting);
}

/**
 * 获取指定格式当前时间
 */
public static String getDate(DatePatternEnum patternEnum) {
    return formatting(getDate(), patternEnum);
}

/**
 * 获取当前年
 *
 * @return
 */
public static int getYear() {
    return getYear(null);
}

/**
 * 获取指定时间的年
 *
 * @return
 */
public static int getYear(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.YEAR);
}

/**
 * 获取当前月
 */
public static int getMonth() {
    return Calendar.getInstance().get(DateConstant.MONTH) + 1;
}

/**
 * 获取指定时间的月
 */
public static int getMonth(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.MONTH) + 1;
}

/**
 * 获取当前日
 */
public static int getDay() {
    return getDay(null);
}

/**
 * 获取指定时间的日
 */
public static int getDay(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.DAY);
}

/**
 * 获取当前时
 */
public static int getHour() {
    return getHour(null);
}

/**
 * 获取指定时间的时
 */
public static int getHour(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.HOUR);
}


/**
 * 获取当前分
 */
public static int getMinute() {
    return getMinute(null);
}

/**
 * 获取指定时间的分
 */
public static int getMinute(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.MINUTE);
}

/**
 * 获取当前秒
 */
public static int getSecond() {
    return getSecond(null);
}

/**
 * 获取指定时间的秒
 */
public static int getSecond(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    return cal.get(DateConstant.SECOND);
}

/**
 * 获取当前时间戳
 */
public static long getcurrentDateToLong() {
    return getDate().getTime();
}

/**
 * 时间类型转字符串类型
 */
public static String formatting(Date date) {
    return formatting(date, DatePatternEnum.DATE_TIME_PATTERN);
}

/**
 * 根据时间格式转换
 */
public static Date formatting(String date, DatePatternEnum patternEnum) {
    try {
        if (patternEnum != null) {
            SimpleDateFormat simpleDateFormat = getSimpleDateFormat(patternEnum.getPattern(), patternEnum.getLocale());
            if (date != null) {
                return simpleDateFormat.parse(date);
            }
        }
    } catch (ParseException ignored) {
        System.out.println(ignored);
    }
    return null;
}

/**
 * 时间类型转字符串类型
 */
@Deprecated
public static String formatting(Date date, String formatting) {
    if (formatting != null && !formatting.equals("")) {
        SimpleDateFormat simpleDateFormat = getSimpleDateFormat(formatting);
        if (date != null) {
            return simpleDateFormat.format(date);
        }
    }
    return null;
}

/**
 * 时间类型转字符串类型
 */
public static String formatting(Date date, DatePatternEnum patternEnum) {
    if (patternEnum != null) {
        SimpleDateFormat simpleDateFormat = getSimpleDateFormat(patternEnum.getPattern(), patternEnum.getLocale());
        if (date != null) {
            return simpleDateFormat.format(date);
        }
    }
    return null;
}

/**
 * 时间转换
 */
@Deprecated
public static Date formattingToDate(Date date, String formatting) {
    String formatDate = DateUtil.formatting(date, formatting);
    if (formatDate != null && !formatDate.equals("")) {
        return DateUtil.formatting(formatDate, formatting);
    }
    return null;
}

/**
 * 字符串类型转时间类型
 */
@Deprecated
public static Date formatting(String date, String formatting) {
    try {
        if (isDate(date, formatting)) {
            return getSimpleDateFormat(formatting).parse(date);
        }
    } catch (ParseException ignored) {
    }
    return null;
}

/**
 * 字符串类型转时间类型
 */
public static Date formatting(String date) {
    return formatting(date, DatePatternEnum.DATE_TIME_PATTERN);
}

/**
 * 获取当前 年月日时分秒毫秒
 */
public static String getCurrentDatetimeSecond() {
    return DateUtil.formatting(DateUtil.getDate(), DatePatternEnum.DATE_TIME_MILLISECOND_PATTERN);
}

/**
 * 判断是否是时间
 */
@Deprecated
public static boolean isDate(String dateOrDatetime, String formatting) {
    try {
        getSimpleDateFormat(formatting).parse(dateOrDatetime);
        return true;
    } catch (Exception e) {
        return false;
    }
}

/**
 * 获取某时间的之前或之后的时间
 *
 * @param datetime 时间
 * @param value    计算的值
 *                 正数为指定时间的下一个计算类型
 *                 负数数为指定时间的上一个计算类型
 * @param type     计算类型
 *                 DateUtil.YEAR 获取年
 *                 DateUtil.MONTH 获取月
 *                 DateUtil.DAY 获取天
 *                 DateUtil.HOUR 获取小时
 *                 DateUtil.MINUTE 获取分钟
 *                 DateUtil.SECOND 获取秒钟
 * @return
 */
public static Date getCalculateDate(Date datetime, int value, int type) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(datetime);
    cal.add(type, value);
    return cal.getTime();
}

/**
 * 计算时间差
 *0
 * @param first 第一个时间
 * @param last  第二个时间
 * @param type  计算相差结果类型:
 *              DateUtil.DAY 获取相差多少天
 *              DateUtil.HOUR 获取相差多少小时
 *              DateUtil.MINUTE 获取相差多少分钟
 *              DateUtil.SECOND 获取相差多少秒钟
 * @return 返回 -1 则获取失败
 */
public static long getDateDiff(Date first, Date last, int type) {
    long millisecond = 1; // 1毫秒
    long second = millisecond * 1000; // 一秒钟的毫秒值
    long minute = second * 60; // 一分钟的毫秒值
    long hour = minute * 60; // 一小时的毫秒值
    long day = hour * 24; // 一天的毫秒值
    long diff = Math.abs(first.getTime() - last.getTime());
    if (DateConstant.DAY == type) { // 计算相差多少天
        return diff / day;
    } else if (DateConstant.HOUR == type) { // 计算相差多少小时
        return diff / hour;
    } else if (DateConstant.MINUTE == type) { // 计算相差多少分钟
        return diff / minute;
    } else if (DateConstant.SECOND == type) { // 计算相差多少秒钟
        return diff / second;
    } else if (DateConstant.MILLISECOND == type) { // 计算相差多少毫秒
        return diff / millisecond;
    }
    return -1L;
}

/**
 * 获取当前的周期
 *
 * @return
 */
public static int getCurrentDayOfWeek() {
    Calendar cal = Calendar.getInstance();
    int week = cal.get(Calendar.DAY_OF_WEEK);
    return week == 1 ? 7 : week - 1;
}

/**
 * 获取指定时间的周期
 *
 * @param date 当前日期
 */
public static int getCurrentDayOfWeek(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int week = cal.get(Calendar.DAY_OF_WEEK);
    return week == 1 ? 7 : week - 1;
}

/**
 * 比较时间的大小
 *
 * @param first 第一个时间
 * @param last  最后一个时间
 * @return -1 first<last, 0 first=last, 1 first>last
 */
public static int compareTo(Date first, Date last) {
    Calendar calFirst = Calendar.getInstance();
    calFirst.setTime(first);
    Calendar calLast = Calendar.getInstance();
    calLast.setTime(last);
    return calFirst.compareTo(calLast);
}

/**
 * 获取当月第一天
 */
public static Date currentMonthFirstDay() {
    return monthFirstDay(null);
}

/**
 * 获取当月第一天
 */
public static Date currentMonthFirstDayStart() {
    return getCurrentDateStart(currentMonthFirstDay());
}

/**
 * 获取指定日期的当月第一天
 */
public static Date monthFirstDay(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    cal.add(Calendar.MONTH, 0);
    cal.set(Calendar.DAY_OF_MONTH, 1);
    return cal.getTime();
}
/**
 * 获取指定日期的当月第一天
 */
public static Date monthFirstDayStart(Date date) {
    return getCurrentDateStart(monthFirstDay(date));
}

/**
 * 获取当月最后一天
 */
public static Date currentMonthLastDay() {
    return monthLastDay(null);
}

/**
 * 获取当月最后一天
 */
public static Date currentMonthLastDayEnd() {
    return getCurrentDateEnd(currentMonthLastDay());
}

/**
 * 获取指定日期的当月最后一天
 */
public static Date monthLastDay(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    return cal.getTime();
}

/**
 * 获取指定日期的当月最后一天
 * @param date
 * @return
 */
public static Date monthLastDayEnd(Date date) {
    return getCurrentDateEnd(monthLastDay(date));
}

/**
 * 获取当前年是否为闰年
 */
public static boolean isLeapYear() {
    return isLeapYear(getYear());
}

/**
 * 获取指定时间是否为闰年
 */
public static boolean isLeapYear(Date date) {
    return isLeapYear(getYear(date));
}

/**
 * 获取指定时间是否为闰年
 */
public static boolean isLeapYear(int year) {
    return (year % 4) == 0;
}

/**
 * 获取当前日期的最早时间
 */
public static Date getCurrentDateStart(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
}

/**
 * 获取当前日期的最后时间
 */
public static Date getCurrentDateEnd(Date date) {
    Calendar cal = Calendar.getInstance();
    if (date != null)
        cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    cal.set(Calendar.MILLISECOND, 999);
    return cal.getTime();
}

public static String formatToDate(Date date) {
    return formatting(date, DatePatternEnum.DATE_PATTERN);
}

public static String formatToDateTime(Date date) {
    return formatting(date, DatePatternEnum.DATE_TIME_PATTERN);
}
public static String formatToDateMinute(Date date) {
    return formatting(date, DatePatternEnum.DATE_MINUTE_PATTERN);
}
public static String formatToMonthMinute(Date date) {
    return formatting(date, DatePatternEnum.MONTH_MINUTE_PATTERN);
}
public static String formatToMonth(Date date) {
    return formatting(date, DatePatternEnum.MONTH_PATTERN);
}

}

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

fBdBA9tXzLZY