枚举型时间工具类,时间字符串自动处理,获取最后一天,调整年、月、天和时、分、秒。

枚举类型的日期工具类

优点就是通过枚举型,见明知意的了解输入时间类型与最终转换的字符串格式。

        //对已知类型时间字符串进行转义
        Date date = null;
        try {
            date = DateTimeUtils.DATE.parseDate("2022-03-03");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(DateTimeUtils.DATE_CHINESE.formatDate(date));
        
        //对未知类型时间字符串自动获取时间枚举工具类
        DateTimeUtils dateTimeUtils =  DateTimeUtils.getDateTimeUtil("2022年01月");
        String formatDate = dateTimeUtils.formatDate(new Date());
        System.out.println(formatDate);
        
        
        //获取时间月、周第一天或着最后一天  等
        final Date weekendOfmonday = DateTimeUtils.getWeekendFirstDayOfMonday(date);
        final Date weekendOfSunday = DateTimeUtils.getWeekendFirstDayOfMonday(date);
        final Date weekendOfmonday1 = DateTimeUtils.getWeekendFirstDayOfMonday("2022-03-03");
        final Date weekendOfSunday1 = DateTimeUtils.getWeekendFirstDayOfSunday("2022-03-03");
        final String monday = DateTimeUtils.DATE.formatDate(weekendOfmonday);
        final String sunday = DateTimeUtils.DATE.formatDate(weekendOfSunday);
        final String monday1 = DateTimeUtils.DATE.formatDate(weekendOfmonday1);
        final String sunday1 = DateTimeUtils.DATE.formatDate(weekendOfSunday1);
        System.out.println(monday);
        System.out.println(sunday);
        System.out.println(monday1);
        System.out.println(sunday1);
        
        //增加天/月/年
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setYearDate(1)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setYearDate(1,weekendOfmonday)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setMonthDate(1)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setMonthDate(1,weekendOfSunday)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setDayDate(1)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setDayDate(1,weekendOfmonday1)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setDate(1,2,3,new Date())));
               System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setDate(0,0,-3,new Date())));
        
        //增加时/分/秒
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setTime(1,0,3,weekendOfSunday1)));
        System.out.println(DateTimeUtils.DATE.formatDate(DateTimeUtils.setTime(-1,0,0,weekendOfSunday1)));

源码如下:


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalQuery;
import java.util.Calendar;
import java.util.Date;

/**
 * 
 * @date 2022年9月29日
 * @Description 枚举类型时间工具类
 * 
 * 
 **/
public enum DateTimeUtils {

    /**
     * 日期格式 <code>[yyyy-MM-dd]</code>
     **/
    YEAR("yyyy", 4), 
    MONTH("MM", 2), 
    DATE("yyyy-MM-dd", 10), 
    DATE_FOR_EXCEL("yyyy.MM.dd", 10),
    DATE_SLASH("yyyy/MM/dd", 10), 
    DATE_MONTH_FOR_EXCEL("yyyy-MM", 7), 
    DATE_MONTH_SLASH_FOR_EXCEL("yyyy/MM", 7),
    TIME("HH:mm:ss", 8), 
    DATE_TIME("yyyy-MM-dd HH:mm:ss", 19), 
    DATE_TIME_FOR_EXCEL("yyyy.MM.dd HH:mm:ss", 19),

    YEAR_CHINESE("yyyy年", 5), 
    MONTH_CHINESE("MM月", 3), 
    DATE_MONTH_CHINESE("yyyy年MM月", 8),
    DATE_CHINESE("yyyy年MM月dd日", 11), 
    DATE_TIME_CHINESE("yyyy年MM月dd日 HH时mm分ss秒", 21);

    private final DateTimeFormatter formatter;

    String pattern;
    int len;

    DateTimeUtils(String pattern, int len) {
        this.pattern = pattern;
        this.len = len;
        this.formatter = DateTimeFormatter.ofPattern(pattern).withZone(ZoneId.systemDefault());
    }

    
    /**
     * 获取现在时
     *
     * @return
     */
    public String now() {
        return formatter.format(Instant.now());
    }

    /**
     * 转换成时间字符串
     */
    public String formatDate(Date date) {
        return date != null ? formatter.format(date.toInstant()) : "";
    }

    public String formatIimestamp(long epochMilli) {
        return formatter.format(Instant.ofEpochMilli(epochMilli));
    }

    private <R> R parse(String date, TemporalQuery<R> query) {
        return formatter.parse(date, query);
    }

    private <R> Date parseDate(String dateStr, TemporalQuery<R> query) {
        return Date.from(parseInstant(dateStr, query));
    }

    private <R> Instant parseInstant(String dateStr, TemporalQuery<R> query) {
        R temporal = parse(dateStr, query);
        if (temporal instanceof Instant) {
            return (Instant) temporal;
        }
        if (temporal instanceof LocalDateTime) {
            return ((LocalDateTime) temporal).atZone(ZoneId.systemDefault()).toInstant();
        }
        if (temporal instanceof LocalDate) {
            return ((LocalDate) temporal).atStartOfDay(ZoneId.systemDefault()).toInstant();
        }
        if (temporal instanceof LocalDateTime) {
            LocalDate epoch = LocalDate.of(1970, 1, 1);
            LocalDateTime dateTime = LocalDateTime.of(epoch, (LocalTime) temporal);
            return dateTime.atZone(ZoneId.systemDefault()).toInstant();
        }
        throw new DateTimeException(" Type parameter must be LocalDateTime of LocalDate of LocalTime of Instant ");
    }

    /**
     * 字符串转换成时间
     */
    public Date parseDate(String dateStr) throws ParseException {
        return new SimpleDateFormat(pattern).parse(dateStr);
    }

    /**
     * 加对应数量的年单位
     */
    public static Date setYearDate(int year) {
        return setDate(year, 0, 0, null);
    }

    /**
     * 加对应数量的年单位
     */
    public static Date setYearDate(int year, Date date) {
        return setDate(year, 0, 0, date);
    }

    /**
     * 加对应数量的月单位
     */
    public static Date setMonthDate(int month) {
        return setDate(0, month, 0, null);
    }

    /**
     * 加对应数量的月单位
     */
    public static Date setMonthDate(int month, Date date) {
        return setDate(0, month, 0, date);
    }

    /**
     * 加对应数量的天单位
     */
    public static Date setDayDate(int day) {
        return setDate(0, 0, day, null);

    }

    /**
     * 加对应数量的天单位
     */
    public static Date setDayDate(int day, Date date) {
        return setDate(0, 0, day, date);
    }

    /**
     * 加对应数量的年月日单位
     */
    public static Date setDate(int year, int month, int day, Date date) {
        final Calendar instance = Calendar.getInstance();
        if (date != null) {
            instance.setTime(date);
        }
        instance.add(Calendar.YEAR, year);
        instance.add(Calendar.MONTH, month);
        instance.add(Calendar.DATE, day);
        return instance.getTime();
    }

    /**
     * 加对应数量的时分秒单位
     */
    public static Date setTime(int hour, int minute, int second, Date date) {
        final Calendar instance = Calendar.getInstance();
        if (date != null) {
            instance.setTime(date);
        }
        instance.add(Calendar.HOUR_OF_DAY, hour);
        instance.add(Calendar.MINUTE, minute);
        instance.add(Calendar.SECOND, second);
        return instance.getTime();
    }

    public String getPattern() {
        return pattern;
    }

    public int getLen() {
        return len;
    }

    /**
     * 获取当周第一天
     * 
     * @param dateStr
     * @return
     */
    public static Date getFirstDayOfWeek(String dateStr) {
        if (dateStr == null || "".equals(dateStr)) {
            return null;
        }
        final DateTimeUtils dateTimeUtil = getDateTimeUtil(dateStr);
        if (dateTimeUtil == null) {
            return null;
        }
        try {
            final Date date = dateTimeUtil.parseDate(dateStr);
            return getFirstDayOfWeek(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取当周第一天
     * 
     * @param date
     * @return
     */
    public static Date getFirstDayOfWeek(Date date) {
        if (date == null) {
            return null;
        }
        final Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(date);
            cal.set(Calendar.DAY_OF_WEEK, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cal.getTime();
    }

    /**
     * 获取当周最后一天
     * 
     * @param dateStr
     * @return
     */
    public static Date getLastDayOfWeek(String dateStr) {
        if (dateStr == null || "".equals(dateStr)) {
            return null;
        }
        final DateTimeUtils dateTimeUtil = getDateTimeUtil(dateStr);
        if (dateTimeUtil == null) {
            return null;
        }
        try {
            final Date date = dateTimeUtil.parseDate(dateStr);
            return getLastDayOfWeek(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取当周最后一天
     * 
     * @param date
     * @return
     */
    public static Date getLastDayOfWeek(Date date) {
        final Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(date);
            cal.set(Calendar.DAY_OF_WEEK, 1);
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 6);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cal.getTime();
    }

    /**
     * 获取时间枚举工具类
     *
     * @param dateStr
     * @return
     */
    public static DateTimeUtils getDateTimeUtil(String dateStr) {
        if (null == dateStr) {
            return null;
        }
        DateTimeUtils[] values = DateTimeUtils.values();
        for (int i = 0; i < values.length; i++) {
            DateTimeUtils dateTimeUtil = values[i];
            if (dateTimeUtil.len == dateStr.length() && dateTimeUtil.pattern.charAt(4) == dateStr.charAt(4)) {
                    return dateTimeUtil;
            }
        }
        return null;
    }

    /**
     * 获取月的最后一天
     * 
     * @return
     */
    public static Date getLastDayOfMonth() {
        return getLastDayOfMonth(new Date(System.currentTimeMillis()));
    }

    /**
     * 获取月的最后一天
     * 
     * @param date 日期
     * @return
     */
    public static Date getLastDayOfMonth(Date date) {
        final Calendar instance = Calendar.getInstance();
        instance.setTime(date);
        instance.set(Calendar.DAY_OF_MONTH, 1);
        instance.roll(Calendar.DAY_OF_MONTH, -1);
        return setTime(23, 59, 59, instance.getTime());
    }

    /**
     * 获取月的第一天
     * 
     * @param date 日期
     * @return
     */
    public static Date getFirstDayOfMonth(Date date) {
        final Calendar instance = Calendar.getInstance();
        instance.setTime(date);
        instance.set(Calendar.DAY_OF_MONTH, 1);
        return instance.getTime();
    }

    public static void main(String[] args) {
    }

    public static Date getWeekendFirstDayOfMonday(String dateStr) {
        if (dateStr == null || "".equals(dateStr)) {
            return null;
        }
        final DateTimeUtils dateTimeUtil = getDateTimeUtil(dateStr);
        if (dateTimeUtil == null) {
            return null;
        }
        try {
            final Date date = dateTimeUtil.parseDate(dateStr);
            return getWeekendFirstDayOfMonday(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 以周日为第一天的获取
     * @param date
     * @return
     */
    public static Date getWeekendFirstDayOfMonday(Date date) {
        if (date == null) {
            return null;
        }
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return calendar.getTime();
    }

    public static Date getWeekendFirstDayOfSunday(String dateStr) {
        if (dateStr == null || "".equals(dateStr)) {
            return null;
        }
        final DateTimeUtils dateTimeUtil = getDateTimeUtil(dateStr);
        if (dateTimeUtil == null) {
            return null;
        }
        try {
            final Date date = dateTimeUtil.parseDate(dateStr);
            return getWeekendFirstDayOfSunday(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;

    }

    public static Date getWeekendFirstDayOfSunday(Date date) {
        if (date == null) {
            return null;
        }
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        return calendar.getTime();
    }

    /**
     * 转化成对应的中文内容
     * 
     * @param dateStr
     * @param chineseDateTimeUtil
     * @return
     * @throws ParseException
     */
    public static String getDataChineseValue(String dateStr, DateTimeUtils chineseDateTimeUtil) throws ParseException {
        String chineseData = "";
        if (dateStr == null || "".equals(dateStr)) {
            return chineseData;
        }
        final DateTimeUtils dateTimeUtil = getDateTimeUtil(dateStr);
        if (dateTimeUtil == null) {
            return chineseData;
        }
        chineseData = chineseDateTimeUtil.formatDate(dateTimeUtil.parseDate(dateStr));

        return chineseData;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值