从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

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

  1. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  2. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  3. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  4. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  5. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  6. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  7. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  8. Java8系列 (六) 新的日期和时间API

    概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...

  9. Java8 新的日期和时间API(笔记)

    LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...

  10. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

随机推荐

  1. 简单聊聊WebDAV

    1.什么是WebDAV? WebDAV是一种基于HTTP协议的扩展,旨在提供在Web服务器上进行文件管理的标准化解决方案.它允许用户通过网络对远程主机上的文件进行读写.编辑和删除操作.与传统的HTTP ...

  2. 【MongoDB】Re03 索引

    MongoDB的索引种类 单属性索引 MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,称为单字段索引(Single Field Index). 对于单个字段索引和排序操作,索引键的排 ...

  3. P6764 [APIO2020] 粉刷墙壁

    思路: 本质上能进行的操作就是我们算出从第 \(i\) 块砖开始,连续刷 \(M\) 块砖,是否有承包商可以刷出期望颜色. 那么设 \(f_i\) 表示 \([i,i+m-1]\) 是否合法,那么就变 ...

  4. Typora配置自动上传图片到图床

      在多平台发布文章时,如果遇到图片不能导入的问题,推荐使用图床!推荐使用阿里云或腾讯云,免费的不用考虑了! PicGo下载 链接:https://pan.quark.cn/s/2ec95402631 ...

  5. 推荐一款好用的PDF转换工具,可以拆分、合并,亲测好用!!!

    推荐一款好用的PDF转换工具,可以拆分.合并,等等操作,亲测好用. PS. 因为经常会遇到PDF的拆分需要,以前在网上的都是免费的,后来的也都变成付费的无水印的了,再然后就变成全都要收费了.尴尬的是, ...

  6. Apache SeaTunnel k8s 集群模式 Zeta 引擎部署指南

    SeaTunnel提供了一种运行Zeta引擎(cluster-mode)的方法,可以让Kubernetes在本地运行Zeta引擎,实现更高效的应用程序部署和管理.在本文中,我们将探索SeaTunnel ...

  7. AWG(American wire gauge)美国线规

    AWG(American wire gauge)美国线规,是一种区分导线直径的标准,又被称为 Brown & Sharpe线规.这种标准化线规系统于1857年起在美国开始使用.AWG前面的数值 ...

  8. sc2 天梯地图

    没记错的话以前 7 张 ban 3 张,非常合理,现在 9 张怎么还是 ban 3 张 好哥哥达蒙星际2教学 Goldenaura ban 三四矿近,挂运输机的地方长,架坦克的点位多,ZvT 打不了一 ...

  9. C++11新特性(一):语言特性

    C++11新特性 总结C++11特性时发现整个内容角度,建议查看前先查看目录. 语言特性 右值引用 右值的分类为将亡值和字面量.将亡值就是将要销毁的对象以及临时的变量,字面量就是常量.左值就是变量. ...

  10. SparkStreaming本地化策略性能调优与使用场景分析

    1.背景介绍:平台使用的华为FI C203的版本,通过SparkStreaming消费kafka数据后,进行算法处理入库.其中在算法部分耗时为4秒,每个批的数据量在30MB左右.执行算法部分的算子分区 ...