从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. 修复ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)

    修复ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES) 直接修改 mysql.user 表中的权限字 ...

  2. 使用 `useServerSeoMeta` 优化您的网站 SEO

    title: 使用 useServerSeoMeta 优化您的网站 SEO date: 2024/7/31 updated: 2024/7/31 author: cmdragon excerpt: 摘 ...

  3. MindSpore 初探, 使用LeNet训练minist数据集

    如题所述,官网地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/quick_start.html 数据集下载: mkdir -p ./datasets/ ...

  4. 【转载】 tmux 向上向下翻页,翻屏

    作者:江河湖海洋链接:https://www.jianshu.com/p/8835f2d4245f来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. =========== ...

  5. baselines算法库run.py模块分析

    baselines算法库地址: https://gitee.com/devilmaycry812839668/baselines =================================== ...

  6. vue之父组件与子组件

    1.背景 2.简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. Apache DolphinScheduler:深入了解大数据调度工具

    一.海豚调度介绍 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统.适用于企业级场景,提供了一个可视化操作任务.工作流和全生命周期数据处理过程的解 ...

  8. BMC Genomics | 综合代谢组学和转录组学分析揭示了菊花黄酮和咖啡酰奎宁酸的生物合成机制

    杭白菊是一种流行的药用和食用植物,主要通过黄酮类和咖啡酰奎宁酸(CQAs)的存在发挥其生物活性.然而,菊花头状花序中黄酮和CQA生物合成的调控机制尚不清楚. 本研究采用高效液相色谱法测定了菊花头状花序 ...

  9. [学习笔记] 丢番图方程 & 同余 & 逆元 - 数论

    首先,他们几个有着极大的相似性.另外,他们的各自的思想都能够很好的服务于另外几个,有助于加深理解. 文中有些letax公式抽风了,全屏之后应该能看得见-- 线性丢番图方程 丢番图不是个图啊!他是个ma ...

  10. Linux中级——“驱动” 控制硬件必须学会的底层知识

    驱动认知 1. 什么是驱动 驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口. 设备分类: linux系统将设备分为3类:字符设备.块设备.网络设备. 字符设备:指只能一个字节一个字节读写的 ...