Java8时间工具类

使用java8新增的时间的特性,解决SimpleDateFormat的线程问题
DateTimeFormatter 代替 SimpleDateFormat

public class Java8DateUtil {
   
    /**
     * 时间单位(年)
     */
    public static final String YEAR = "year";

    /**
     * 时间单位(月)
     */
    public static final String MONTH = "month";

    /**
     * 时间单位(星期)
     */
    public static final String WEEK = "week";

    /**
     * 时间单位(天)
     */
    public static final String DAY = "day";

    /**
     * 时间单位(时)
     */
    public static final String HOUR = "hour";

    /**
     * 时间单位(分)
     */
    public static final String MINUTE = "minute";

    /**
     * 时间单位(秒)
     */
    public static final String SECOND = "second";

    /**
     * 星期元素
     * <p>
     * 星期一
     */
    public static final String MONDAY = "MONDAY";

    /**
     * 星期二
     */
    public static final String TUESDAY = "TUESDAY";

    /**
     * 星期三
     */
    public static final String WEDNESDAY = "WEDNESDAY";

    /**
     * 星期四
     */
    public static final String THURSDAY = "THURSDAY";

    /**
     * 星期五
     */
    public static final String FRIDAY = "FRIDAY";

    /**
     * 星期六
     */
    public static final String SATURDAY = "SATURDAY";

    /**
     * 星期日
     */
    public static final String SUNDAY = "SUNDAY";

    /**
     * 2015-05-20
     */
    public static final String yyyy_MM_dd_Str = "yyyy-MM-dd";

    /**
     * 2015日05月20日
     */
    public static final String yyyy年MM月dd日Str = "yyyy年MM月dd日";

    /**
     * 2015-05-20 13
     */
    public static final String yyyy_MM_dd_HH_Str = "yyyy-MM-dd HH";

    /**
     * 2015日05月20日 13时
     */
    public static final String yyyy年MM月dd日HH时Str = "yyyy年MM月dd日HH时";

    /**
     * 2015-05-20 13:29
     */
    public static final String yyyy_MM_dd_HH_mm_Str = "yyyy-MM-dd HH:mm";

    /**
     * 2015日05月20日 13时29分
     */
    public static final String yyyy年MM月dd日HH时mm分Str = "yyyy年MM月dd日HH时mm分";

    /**
     * 2015-05-20 13:29:35
     */
    public static final String yyyy_MM_dd_HH_mm_ss_Str = "yyyy-MM-dd HH:mm:ss";

    /**
     * 2015日05月20日 13时29分35秒
     */
    public static final String yyyy年MM月dd日HH时mm分ss秒Str = "yyyy年MM月dd日HH时mm分ss秒";

    /**
     * 05-20
     */
    public static final String MM_dd_Str = "MM-dd";
    /**
     * 05-20
     */
    public static final String MM月dd日Str = "MM月dd日";

    /**
     * 15日05月20日
     */
    public static final String yy年MM月dd日Str = "yy年MM月dd日";

    /**
     * 13:29:35
     */
    public static final String HH_mm_ss_Str = "HH:mm:ss";

    /**
     * 13时29分35秒
     */
    public static final String HH时mm分ss秒Str = "HH时mm分ss秒";

    /**
     * 2015-05-20T13:29:35+08:00 格式
     */
    public static final String yyyy_MM_dd_T_HH_mm_ssXXX_Str = "yyyy-MM-dd'T'HH:mm:ssXXX";

    // 根据指定格式显示日期和时间
    /**
     * yyyy-MM-dd
     */
    public static final DateTimeFormatter yyyyMMdd_EN = DateTimeFormatter.ofPattern(yyyy_MM_dd_Str);

    /**
     * yyyy-MM-dd HH
     */
    public static final DateTimeFormatter yyyyMMddHH_EN = DateTimeFormatter.ofPattern(yyyy_MM_dd_HH_Str);

    /**
     * yyyy-MM-dd HH:mm
     */
    public static final DateTimeFormatter yyyyMMddHHmm_EN = DateTimeFormatter.ofPattern(yyyy_MM_dd_HH_mm_Str);

    /**
     * yyyy-MM-dd HH:mm:ss
     */
    public static final DateTimeFormatter yyyyMMddHHmmss_EN = DateTimeFormatter.ofPattern(yyyy_MM_dd_HH_mm_ss_Str);

    /**
     * 2015-05-20T13:29:35+08:00 格式
     */
    public static final DateTimeFormatter yyyy_MM_dd_T_HH_mm_ssXXX = DateTimeFormatter.ofPattern(yyyy_MM_dd_T_HH_mm_ssXXX_Str);

    /**
     * HH:mm:ss
     */
    public static final DateTimeFormatter HHmmss_EN = DateTimeFormatter.ofPattern(HH_mm_ss_Str);

    /**
     * yyyy年MM月dd日
     */
    public static final DateTimeFormatter yyyyMMdd_CN = DateTimeFormatter.ofPattern(yyyy年MM月dd日Str);

    /**
     * yyyy年MM月dd日HH时
     */
    public static final DateTimeFormatter yyyyMMddHH_CN = DateTimeFormatter.ofPattern(yyyy年MM月dd日HH时Str);

    /**
     * yyyy年MM月dd日HH时mm分
     */
    public static final DateTimeFormatter yyyyMMddHHmm_CN = DateTimeFormatter.ofPattern(yyyy年MM月dd日HH时mm分Str);

    /**
     * yyyy年MM月dd日HH时mm分ss秒
     */
    public static final DateTimeFormatter yyyyMMddHHmmss_CN = DateTimeFormatter.ofPattern(yyyy年MM月dd日HH时mm分ss秒Str);

    /**
     * HH时mm分ss秒
     */
    public static final DateTimeFormatter HHmmss_CN = DateTimeFormatter.ofPattern(HH时mm分ss秒Str);

    /**
     * 本地时间显示格式:区分中文和外文显示
     */
    private static final DateTimeFormatter shotDate = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
    private static final DateTimeFormatter fullDate = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
    private static final DateTimeFormatter longDate = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    private static final DateTimeFormatter mediumDate = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);

    /**
     * 获取当前日期
     *
     * @return yyyy-MM-dd
     * @author zero 2019/03/30
     */
    public static String getNowDate_EN() {
   
        return String.valueOf(LocalDate.now());
    }

    /**
     * 获取当前日期
     *
     * @return 字符串yyyy-MM-dd HH:mm:ss
     * @author zero 2019/03/30
     */
    public static String getNowTime_EN() {
   
        return LocalDateTime.now().format(yyyyMMddHHmmss_EN);
    }

    /**
     * 获取当前时间(yyyy-MM-dd HH)
     */
    public static String getNowTime_EN_yMdH() {
   
        return LocalDateTime.now().format(yyyyMMddHH_EN);
    }

    /**
     * 获取当前时间(yyyy年MM月dd日)
     */
    public static String getNowTime_CN_yMdH() {
   
        return LocalDateTime.now().format(yyyyMMddHH_CN);
    }

    /**
     * 获取当前时间(yyyy-MM-dd HH:mm)
     */
    public static String getNowTime_EN_yMdHm() {
   
        return LocalDateTime.now().format(yyyyMMddHHmm_EN);
    }

    /**
     * 获取当前时间(yyyy年MM月dd日HH时mm分)
     */
    public static String getNowTime_CN_yMdHm() {
   
        return LocalDateTime.now().format(yyyyMMddHHmm_CN);
    }

    /**
     * 获取当前时间(HH时mm分ss秒)
     */
    public static String getNowTime_CN_HHmmss() {
   
        return LocalDateTime.now().format(HHmmss_CN);
    }

    /**
     * 根据日期格式,获取当前时间
     *
     * @param formatStr 日期格式<br>
     *                  <li>yyyy</li>
     *                  <li>yyyy-MM-dd</li>
     *                  <li>yyyy-MM-dd HH:mm:ss</li>
     *                  <li>HH:mm:ss</li>
     * @return
     * @author zero 2019/03/30
     */
    public static String getNowFormatTime(String formatStr) {
   
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(formatStr));
    }

    /**
     * 获取中文的当前日期
     *
     * @return yyyy年mm月dd日
     * @author zero 2019/03/30
     */
    public static String getNowFormatDate_CN() {
   
        return LocalDate.now().format(yyyyMMdd_CN);
    }

    /**
     * 获取中文当前时间
     *
     * @return yyyy年MM月dd日HH时mm分ss秒
     * @author zero 2019/03/30
     */
    public static String getNowFormatTime_CN() {
   
        return LocalDateTime.now().format(yyyyMMddHHmmss_CN);
    }

    /**
     * 简写本地当前日期:yy-M-dd<br>
     * 例如:19-3-30为2019年3月30日
     *
     * @return 字符串yy-M-dd
     * @author zero 2019/03/30
     */
    public static String getNowLocalTime_shot() {
   
        return LocalDateTime.now().format(shotDate);
    }

    /**
     * 根据当地日期显示格式:yyyy年M月dd日 星期?(中国)
     *
     * @return 形如:2019年3月30日 星期六
     * @author zero 2019/03/30
     */
    public static String getNowLocalTime_full() {
   
        return LocalDateTime.now().format(fullDate);
    }

    /**
     * 根据当地显示日期格式:yyyy年M月dd日(中国)
     *
     * @return 形如 2019年3月30日
     * @author zero 2019/03/30
     */
    public static String getNowLocalTime_long() {
   
        return LocalDateTime.now().format(longDate);
    }

    /**
     * 根据当地显示日期格式:yyyy-M-dd(中国)
     *
     * @return 形如:2019-3-30
     * @author zero 2019/03/30
     */
    public static String getNowLocalTime_medium() {
   
        return LocalDateTime.now().format(mediumDate);
    }

    /**
     * 获取当前日期的节点时间(年,月,周,日,时,分,秒)
     *
     * @param node 日期中的节点元素(年,月,周,日,时,分,秒)
     * @return 节点数字,如创建此方法的时间:年 2019,月 3,日 30,周 6
     * @author zero 2019/03/30 星期六
     */
    public static Integer getNodeTime(String node) {
   
        LocalDateTime today = LocalDateTime.now();
        Integer resultNode = null;
        switch (node) {
   
            case YEAR:
                resultNode = today.getYear();
                break;
            case MONTH:
                resultNode = today.getMonthValue();
                break;
            case WEEK:
                resultNode = transformWeekEN2Num(String.valueOf(today.getDayOfWeek()));
                break;
            case DAY:
                resultNode = today.getDayOfMonth();
                break;
            case HOUR:
                resultNode = today.getHour();
                break;
            case MINUTE:
                resultNode = today.getMinute();
                break;
            case SECOND:
                resultNode = today.getSecond();
                break;
            default:
                // 当前日期是当前年的第几天。例如:2019/1/3是2019年的第三天
                resultNode = today.getDayOfYear();
                break;
        }
        return resultNode;
    }

    /**
     * 将英文星期转换成数字
     *
     * @param enWeek 英文星期
     * @return int,如果数字小于0,则检查,看是否输入错误 or 入参为null
     * @author zero 2019/03/30
     */
    public static int transformWeekEN2Num(String enWeek) {
   
        if (MONDAY.equals(enWeek)) {
   
            return 1;
        } else if (TUESDAY.equals(enWeek)) {
   
            return 2;
        } else if (WEDNESDAY.equals(enWeek)) {
   
            return 3;
        } else if (THURSDAY.equals(enWeek)) {
   
            return 4;
        } else if (FRIDAY.equals(enWeek)) {
   
            return 5;
        } else if (SATURDAY.equals(enWeek)) {
   
            return 6;
        } else if (SUNDAY.equals(enWeek)) {
   
            return 7;
        } else {
   
            return -1;
        }
    }

    /**
     * 获取当前日期之后(之后)的节点事件<br>
     * <ul>
     * 比如当前时间为:2019-03-30 10:20:30
     * </ul>
     * <li>node="hour",num=5L:2019-03-30 15:20:30</li>
     * <li>node="day",num=1L:2019-03-31 10:20:30</li>
     * <li>node="year",num=1L:2020-03-30 10:20:30</li>
     *
     * @param node 节点元素(“year”,"month","week","day","huor","minute","second")
     * @param num  第几天(+:之后,-:之前)
     * @return 之后或之后的日期
     * @author zero 2019/03/30
     */
    public static String getAfterOrPreNowTime(String node, Long num) {
   
        LocalDateTime now = LocalDateTime.now();
        if (HOUR.equals(node)) {
   
            return now.plusHours(num).format(yyyyMMddHHmmss_EN);
        } else if (DAY.equals(node)) {
   
            return now.plusDays(num).format(yyyyMMddHHmmss_EN);
        } 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值