• Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。


      从Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter中可以知道常用字符有超过20几种,各种组合结果非常多。但常用的组合就几十种,现在在 xk-time的原有模板中增加了Excel常用格式,方便大家使用。

    直接看下代码:

    package com.xkzhangsan.time.formatter;
    
    /**
     * 日期格式化常用模板
     * 
     * @author xkzhangsan
     * @date 2020年5月23日
     */
    public class DateFormatPattern {
        
        private DateFormatPattern(){
        }
    
        // ==================================yyyy-MM-dd相关Pattern==================================
        
        /**
         * yyyy-MM-dd 比如:  2020-05-23
         */
        public static final String YYYY_MM_DD = "yyyy-MM-dd";
        
        /**
         * yyyy-M-d 不补0 比如:  2020-5-23
         */
        public static final String YYYY_M_D = "yyyy-M-d";
        
        /**
         * yyyyMMdd  比如:  20200523
         */
        public static final String YYYYMMDD = "yyyyMMdd";
        
        /**
         * yyyy/MM/dd  比如:  2020/05/23
         */
        public static final String YYYY_MM_DD_EN = "yyyy/MM/dd";
        
        /**
         * yyyy/M/d 不补0  比如:  2020/5/23
         */
        public static final String YYYY_M_D_EN = "yyyy/M/d";
        
        /**
         * yyyy年MM月dd日  比如: 2020年05月23日
         */
        public static final String YYYY_MM_DD_CN = "yyyy年MM月dd日";
        
        /**
         * yyyy年M月d日 不补0  比如: 2020年5月23日
         */
        public static final String YYYY_M_D_CN = "yyyy年M月d日";
        
        /**
         * yyyy.MM.dd  比如:2020.05.23
         */
        public static final String YYYY_MM_DD_POINT = "yyyy.MM.dd";
        
        /**
         * yyyy.M.d 不补0  比如:2020.5.23
         */
        public static final String YYYY_M_D_POINT = "yyyy.M.d";
        
        /**
         * yy/MM/dd  比如:20/05/23
         */
        public static final String YY_MM_DD_EN = "yy/MM/dd";
        
        /**
         * yy/M/d  比如:20/5/23
         */
        public static final String YY_M_D_EN = "yy/M/d";
    
        /**
         * MM/dd/yy  比如:05/23/20
         */
        public static final String MM_DD_YY_EN = "MM/dd/yy";
        
        /**
         * M/d/yy  比如:5/23/20
         */
        public static final String M_D_YY_EN = "M/d/yy";
    
        /**
         * yyyy-MM-dd E  比如:2020-05-23 星期六
         */
        public static final String YYYY_MM_DD_E = "yyyy-MM-dd E";
        
        /**
         * yy 年的后2位  比如: 20
         */
        public static final String YY = "yy";
        
        /**
         * yyyy  比如:2020
         */
        public static final String YYYY = "yyyy";
    
        /**
         * yyyy-MM  比如:2020-05
         */
        public static final String YYYY_MM = "yyyy-MM";
    
        /**
         * yyyyMM  比如:202005
         */
        public static final String YYYYMM = "yyyyMM";
    
        /**
         * yyyy/MM  比如:2020/05
         */
        public static final String YYYY_MM_EN = "yyyy/MM";
    
        /**
         * yyyy年MM月  比如:2020年05月
         */
        public static final String YYYY_MM_CN = "yyyy年MM月";
        
        /**
         * yyyy年M月  比如:2020年5月
         */
        public static final String YYYY_M_CN = "yyyy年M月";
    
        /**
         * MM-dd  比如:05-23
         */
        public static final String MM_DD = "MM-dd";
    
        /**
         * MMdd  比如:0523
         */
        public static final String MMDD = "MMdd";
    
        /**
         * MM/dd  比如:05/23
         */
        public static final String MM_DD_EN = "MM/dd";
    
        /**
         * M/d 不补0  比如:5/23
         */
        public static final String M_D_EN = "M/d";
        
        /**
         * MM月dd日  比如:05月23日
         */
        public static final String MM_DD_CN = "MM月dd日";
    
        /**
         * M月d日 不补0  比如:5月23日
         */
        public static final String M_D_CN = "M月d日";
        
        
        
        // ==================================HH:mm:ss 相关Pattern==================================
        
        /**
         * HH:mm:ss  比如:17:26:30
         */
        public static String HH_MM_SS = "HH:mm:ss";
        
        /**
         * H:m:s  比如:17:6:30
         */
        public static String H_M_S = "H:m:s";
    
        /**
         * HHmmss  比如:170630
         */
        public static String HHMMSS = "HHmmss";
    
        /**
         * HH时mm分ss秒  比如:17时06分30秒
         */
        public static String HH_MM_SS_CN = "HH时mm分ss秒";
    
        /**
         * HH:mm  比如:17:06
         */
        public static String HH_MM = "HH:mm";
        
        /**
         * H:m  比如:17:6
         */
        public static String H_M = "H:m";
    
        /**
         * HH时mm分 比如:17时06分
         */
        public static String HH_MM_CN = "HH时mm分";
    
        /**
         * hh:mm a 比如:05:06 下午 如果需要 显示PM 需要设置 Locale.ENGLISH
         */
        public static String HH_MM_A = "hh:mm a";
        
        
        // ==================================yyyy-MM-dd HH:mm:ss 相关Pattern==================================
        
        /**
         * yyyy-MM-dd HH:mm:ss 比如:2020-05-23 17:06:30
         */
        public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
        
        /**
         * yyyy-M-d H:m:s 比如:2020-5-23 17:6:30
         */
        public static final String YYYY_M_D_H_M_S = "yyyy-M-d H:m:s";
    
        /**
         * yyyyMMddHHmmss 比如:20200523170630
         */
        public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
        
        /**
         * yyyy/MM/dd HH:mm:ss 比如:2020/05/23 17:06:30
         */
        public static final String YYYY_MM_DD_HH_MM_SS_EN = "yyyy/MM/dd HH:mm:ss";
        
        /**
         * yyyy/M/d H:m:s 比如:2020/5/23 17:6:30
         */
        public static final String YYYY_M_D_H_M_S_EN = "yyyy/M/d H:m:s";
    
        /**
         * yyyy年MM月dd日 HH:mm:ss 比如:2020年05月23日 17:06:30
         */
        public static final String YYYY_MM_DD_HH_MM_SS_CN = "yyyy年MM月dd日 HH:mm:ss";
    
        /**
         * yyyy年MM月dd日 HH时mm分ss秒 比如:2020年05月23日 17时06分30秒
         */
        public static final String YYYY_MM_DD_HH_MM_SS_CN_ALL = "yyyy年MM月dd日 HH时mm分ss秒";
        
        /**
         * yyyy-MM-dd HH:mm 比如:2020-05-23 17:06
         */
        public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
        
        /**
         * yyyy-M-d H:m 比如:2020-5-23 17:6
         */
        public static final String YYYY_M_D_H_M = "yyyy-M-d H:m";
        
        /**
         * yyyyMMddHHmm 比如:202005231706
         */
        public static final String YYYYMMDDHHMM = "yyyyMMddHHmm";
    
        /**
         * yyyy/MM/dd HH:mm 比如:2020/05/23 17:06
         */
        public static final String YYYY_MM_DD_HH_MM_EN = "yyyy/MM/dd HH:mm";
        
        /**
         * yyyy/M/d H:m 比如:2020/5/23 17:6
         */
        public static final String YYYY_M_D_H_M_EN = "yyyy/M/d H:m";
        
        /**
         * yyyy/M/d h:m a 比如:2020/5/23 5:6 下午
         */
        public static final String YYYY_M_D_H_M_A_EN = "yyyy/M/d h:m a";
        
        /**
         * MM-dd HH:mm 比如:05-23 17:06
         */
        public static final String MM_DD_HH_MM = "MM-dd HH:mm";
    
        /**
         * MM月dd日 HH:mm 比如:05月23日 17:06
         */
        public static final String MM_DD_HH_MM_CN = "MM月dd日 HH:mm";
    
        /**
         * MM-dd HH:mm:ss 比如:05-23 17:06:30
         */
        public static final String MM_DD_HH_MM_SS = "MM-dd HH:mm:ss";
    
        /**
         * MM月dd日 HH:mm:ss 比如:05月23日 17:06:30
         */
        public static final String MM_DD_HH_MM_SS_CN = "MM月dd日 HH:mm:ss";
    
        /**
         * yyyy年MM月dd日 hh:mm:ss a 比如:2020年05月23日 05:06:30 下午  如果需要 显示PM 需要设置 Locale.ENGLISH
         */
        public static final String YYYY_MM_DD_HH_MM_SS_A_CN = "yyyy年MM月dd日 hh:mm:ss a";
        
        /**
         * yyyy年MM月dd日 hh时mm分ss秒 a 比如:2020年05月23日 17时06分30秒 下午  如果需要 显示PM 需要设置 Locale.ENGLISH
         */
        public static final String YYYY_MM_DD_HH_MM_SS_A_CN_ALL = "yyyy年MM月dd日 hh时mm分ss秒 a";
        
        
        
        // ==================================yyyy-MM-dd HH:mm:ss.SSS 相关Pattern==================================
    
        /**
         * yyyy-MM-dd HH:mm:ss.SSS 比如:2020-05-23 17:06:30.272
         */
        public static final String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
    
        /**
         * yyyyMMddHHmmssSSS 比如:20200523170630272
         */
        public static final String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
        
        /**
         * yyyy-M-d H:m:s.SSS 比如:2020-5-23 17:6:30.272
         */
        public static final String YYYY_M_D_H_M_S_SSS = "yyyy-M-d H:m:s.SSS";
    
        /**
         * yyyy/M/d H:m:s.SSS 比如:2020/5/23 17:6:30.272
         */
        public static final String YYYY_M_D_H_M_S_SSS_EN = "yyyy/M/d H:m:s.SSS";
    
        
        // ==================================Iso相关Pattern 包含 T==================================
        
        /**
         * yyyy-MM-dd'T'HH:mm:ssZ 比如:2020-05-23T17:06:30+0800
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_Z = "yyyy-MM-dd'T'HH:mm:ssZ";
    
        /**
         * yyyy-MM-dd'T'HH:mm:ssxxx 比如:2020-05-23T17:06:30+08:00
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_XXX = "yyyy-MM-dd'T'HH:mm:ssxxx";
        
        /**
         * yyyy-MM-dd'T'HH:mm:ssXXX 比如:2020-05-23T17:06:30+08:00 0时区时末尾 为Z
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_XXX_Z = "yyyy-MM-dd'T'HH:mm:ssXXX";
    
        /**
         * yyyy-MM-dd'T'HH:mm:ss.SSSZ 比如:2020-05-23T17:06:30.272+0800
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_SSS_Z = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
    
        /**
         * yyyy-MM-dd'T'HH:mm:ss.SSSxxx 比如:2020-05-23T17:06:30.272+08:00
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_SSS_XXX = "yyyy-MM-dd'T'HH:mm:ss.SSSxxx";
    
        /**
         * yyyy-MM-dd'T'HH:mm:ss.SSSXXX 比如:2020-05-23T17:06:30.272+08:00 0时区时末尾 为Z
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_SSS_XXX_Z = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
        
        
        // ==================================其他格式 Pattern==================================
    
        /**
         * Date 默认格式 EEE MMM dd HH:mm:ss zzz yyyy 比如:  Sat May 23 17:06:30 CST 2020
         */
        public static final String EEE_MMM_DD_HH_MM_SS_ZZZ_YYYY = "EEE MMM dd HH:mm:ss zzz yyyy";
    
    }

    上面都是经过验证的格式和实例,下面是几个常见问题

    1.不补0格式问题

    使用单个字符表示,如果小于对应位置的位数,不补0。

    比如 : 2020/5/23 使用 yyyy/M/d

    2.AM PM格式问题

    这个根据语言设置 Locale.ENGLISH,不设置的话是 上午,下午。跟随系统语言。

    DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);

    3.+08:00格式 问题

    Java8中比以前多了一个标识,小写 x,在0时区时显示大小写有差异。大写X 显示 Z  小写 x显示 +00:00

        /**
         * yyyy-MM-dd'T'HH:mm:ssxxx 比如:2020-05-23T17:06:30+08:00
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_XXX = "yyyy-MM-dd'T'HH:mm:ssxxx";
        
        /**
         * yyyy-MM-dd'T'HH:mm:ssXXX 比如:2020-05-23T17:06:30+08:00 0时区时末尾 为Z
         */
        public static final String YYYY_MM_DD_T_HH_MM_SS_XXX_Z = "yyyy-MM-dd'T'HH:mm:ssXXX";

    4.Jdk8 解析 yyyyMMddHHmmssSSS 问题

    https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8031085

    这个问题在Jdk9中修复。

    Java8中推荐创建DateTimeFormatter方式:

    DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").appendValue(ChronoField.MILLI_OF_SECOND, 3).toFormatter();



    源代码地址:https://github.com/xkzhangsan/xk-time

  • 相关阅读:
    Mongodb 插入数据的方式
    vue插槽(slot)的模板与JSX写法
    vue-resource+iview上传文件取消上传
    封装全局icon组件 svg (仿造element-ui源码)
    vue 修改框架less变量
    vue webpack多页面构建
    vue2 自定义全局组件(Loading加载效果)
    制作npm插件vue-toast-m实例练习
    iview+axios实现文件取消上传
    CSS Variables
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/12945197.html
Copyright © 2020-2023  润新知