从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. python面向对象:多态

    python面向对象:多态 多态的应用场景 1. 对象所属的类之间没有继承关系 调用同一个函数fly(), 传入不同的参数(对象),可以达成不同的功能 class Duck(object): # 鸭子 ...

  2. Vue Hook 封装通用型表格

    一.创建通用型表格的需求 实现一个通用型表格组件,具备以下功能: 动态列配置. 分页功能. 排序功能. 可扩展的行操作功能. 二.设计通用型表格组件 首先,需要设计一个基础的表格组件,它接受列配置.数 ...

  3. 【RabbitMQ】14 集群搭建

    多服务器单实例 -- 参考博客: https://www.cnblogs.com/lixioayi/articles/9993658.html 首先要找到cookie文件,所有实例要保持cookie一 ...

  4. 通用人工智能的基石 —— 人工智能“新基建、关键基础设施”—— 3D游戏引擎

    相关: https://www.unrealengine.com/zh-CN/uses/simulation https://www.epicgames.com/site/zh-CN/careers/ ...

  5. ubuntu20.04/22.04 系统环境下源码编译Python3.10

    2022年10月3日更新 在Ubuntu22.04系统上源码编译python,所依赖环境的安装命令为: sudo apt install gcc g++ libffi-dev build-essent ...

  6. CH08_结构体

    CH08_结构体 基本概念 结构体属于用户自定义数据类型,允许用户存储不同的数据类型. 定义和使用 语法:struct 结构体名{ 结构体成员列表} 通过结构体创建变量的方式有三种: struct 结 ...

  7. .NET 9 优化,抢先体验 C# 13 新特性

    前言 微软即将在 2024年11月12日发布 .NET 9 的最终版本,而08月09日发布的.NET 9 Preview 7 是最终发布前的最后一个预览版.这个版本将与.NET Conf 2024一同 ...

  8. JVM深入学习-ClassLoader篇(一)

    初识JVM --- ClassLoader深入理解 ClassLoader.SPI机制 Class对象的理解 java在诞生之初,就有一次编译到处运行的名言,今天我们来探究一下,从java代码到cla ...

  9. Ansible-playbook 应用梳理

    前面已经介绍过Ansible的安装配置及常见模块的使用 --<Linux下使用Ansible处理批量操作> Palybook简介 palybook是由一个或多个paly组成的列表,play ...

  10. 禁止 SSH 传递 locale 环境变量

    SSH 在连接远程机器时默认会传递一些环境变量,其中就包括你本机的 locale 变量.这会导致远程机器的 locale 配置变成和你本地主机一样.有时候我们不希望这种行为,我们可以通过修改 SSH ...