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
Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。的更多相关文章
- 在swt中获取jar包中的文件 uri is not hierarchical
uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...
- API接口自动化之3 同一个war包中多个接口做自动化测试
同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...
- Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包
最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的: 很明显建立项目后的架构是上 ...
- Mac 如何导出ipa文件中Assets.car包中的切图
在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...
- 【转】Eclipse中查看jar包中的源码
(简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...
- JDK中的Atomic包中的类及使用
引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...
- Package.json中dependencies依赖包中^符号和~符号前缀的区别
刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...
- Java8系列 (六) 新的日期和时间API
概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...
- Java8 新的日期和时间API(笔记)
LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
随机推荐
- 【Docker】05 容器操作
[查看容器 Check Container] 查看所有容器: docker ps 查看所有正在运行的,或者运行过的容器: docker ps -a 查看单个指定的容器完整信息: docker insp ...
- 【转载】 Tensorflow Guide: Batch Normalization (tensorflow中的Batch Normalization)
原文地址: http://ruishu.io/2016/12/27/batchnorm/ ------------------------------------------------------- ...
- tensorflow的官方强化学习库agents的相关内容及一些注意事项
源代码地址: https://github.com/tensorflow/agents TensorFlow给出的官方文档说明: https://tensorflow.google.cn/agents ...
- 给我5分钟,保证教会你在vue3中动态加载远程组件
前言 在一些特殊的场景中(比如低代码.减少小程序包体积.类似于APP的热更新),我们需要从服务端动态加载.vue文件,然后将动态加载的远程vue组件渲染到我们的项目中.今天这篇文章我将带你学会,在vu ...
- 【树的直径 求树中距离跟阶段点最远的点】CodeForce1822F.md
CF1822F-Problem - F - Codeforces 题目大意:无根树的每条边为k,定义操作:移动根节点为把当前的根ROOT移动到相邻节点,每次代价为c, 定义成本=从ROOT出发到达的最 ...
- 什么是ARM中的SP(堆栈)和LR?
LR是用于保存函数调用的返回地址的link register. SP是堆栈指针.堆栈通常用于在函数调用中保存"automatic"变量和上下文/参数.从概念上讲,您可以将" ...
- Java String 去掉特殊字符之前的内容方法
为了去除字符串中某个特殊字符之前(包括该特殊字符本身)的所有内容,我们可以使用Java中的String类的substring和indexOf方法.这里,我将给出一个完整的代码示例,该示例会找到字符串中 ...
- Windows 10 美化 Mac OSX 实用教程
我前几天给新电脑装上了Windows 10系统,想要美化一下,遇到了很多问题,就出了这篇博客,帮大家踩踩坑. 在开始之前,先提醒大家一句: 美化有风险,玩机需谨慎.为以防万一,请大家在进行任何操作前创 ...
- pikachu靶场 暴力破解(验证码绕过 on server)
先随便输入账号和密码.验证码,来判断前端是否对验证码进行判断对错 先随便输入账号和密码不输入验证码,来判断前端是否允许验证码留空 先随便输入账号和密码,输入正确的验证码,来判断账号和密码是否存在 1. ...
- Pandas从入门到放弃
公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiyw Pandas简介 Pandas是Panel data(面板数据)和Data anal ...