Java 解析日期格式各个字段含义温习

背景

今天解析了一个不常见的日期格式 「10-Mar-2025 16:30:47.869」,对应的 Java 日期格式是 dd-MMM-yyyy HH:mm:ss.SSS ,而且跟 Local 语言环境有关。

本文记录这个简单的解析过程,顺便回忆一下日期格式各个字段。毕竟平时只用了常见的 yyyyMMddHHmmss 这种。最重要的一点,日期字符串的格式化和解析类跟 Local 语言环境有关。

日期字段说明

关于日期的各个字段说明如下

字段 说明 示例
G 公元时代 英文环境:AD;中文环境:公元
yy 年份的后2位 25
yyyy 完整年份 2025
MM 月份,显示为 1-12 ,不足两位的前面补 0 04
MMM 月份简写 英文环境:Apr ;中文环境:4月
MMMM 月份全称 英文环境:April;中文环境: 四月
dd 日,2 位数表示,不足两位前面补 0 02
d 日,1-2 位显示 2
EEE 简写星期几 英文环境:Thu;中文环境: 周四
EEEE 全写星期几 英文环境:Thursday;中文环境: 星期四
aa 上下午 英文环境:AM 或 PM;中文环境:上午或下午
H 小时,24小时制 7
HH 小时,24小时制,不足两位前面补 0 07
h 小时,12小时制 7
hh 小时,12小时制,不足两位前面补 0 07
m 分,1-2位 1
mm 分,2位,不足两位前面补 0 01
s 秒,1-2位 1
ss 秒,2位,不足两位前面补 0 01
S 毫秒 302
Z GMT(时区) +0800

测试

根据上面的全部的日期字段,设置两种包含内容最全的格式:

  1. 全写:G yyyy-MMMM-dd HH:mm:ss.SSS EEEE aa Z
  2. 简写:G yy-MMM-d H:m:s.SSS EEE aa Z

编写代码,使用这两种格式打印当前时间:

java 复制代码
String fullPattern = "G yyyy-MMMM-dd HH:mm:ss.SSS EEEE aa Z";
String simplePattern = "G yy-MMM-d H:m:s.SSS EEE aa Z";
SimpleDateFormat format1 = new SimpleDateFormat(fullPattern);
SimpleDateFormat format2 = new SimpleDateFormat(simplePattern);
System.out.println("中文环境下");
System.out.println("完整 G yyyy-MMMM-dd HH:mm:ss.SSS EEEE aa Z 的结果:"+format1.format(new Date()));
System.out.println("简写 G yy-MMM-d H:m:s.SSS EEE aa Z 的结果:"+format2.format(new Date()));

System.out.println("英文环境下");
Locale.setDefault(Locale.ENGLISH);

SimpleDateFormat formatEn = new SimpleDateFormat(fullPattern);
SimpleDateFormat formatEn2 = new SimpleDateFormat(simplePattern);
System.out.println("完整 G yyyy-MMMM-dd HH:mm:ss.SSS EEEE aa Z 的结果:"+formatEn.format(new Date()));
System.out.println("简写 G yy-MMM-d H:m:s.SSS EEE aa Z 的结果:"+formatEn2.format(new Date()));

String time = "24-Mar-2025 21:10:31.791";
SimpleDateFormat parseFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS", Locale.ENGLISH);
try {
    Date t = parseFormat.parse(time);
    System.out.println("解析结果:"+t);
} catch (ParseException e) {
    throw new RuntimeException(e);
}

运行结果:

启示录

详细的看了看各个字段的含义,还是挺有启发的,尤其是星期和月份的缩写和全写在中文环境下的细微区别。全写的星期和月份用于更正式的语言环境下,月份的全称是汉字数字大写形式。

一招鲜的技术说好吧也好,不好吧,也太寡闻了,除了常用的9个字段,其他基本没有听过。还有一个疑惑,为什么星期的字段名称用了 E 而不是 W 呢,星期的英文不是 Week 么?

相关推荐
秋千码途2 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇2 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
时来天地皆同力.2 小时前
Java面试基础:概念
java·开发语言·jvm
找不到、了3 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
阿华的代码王国3 小时前
【Android】搭配安卓环境及设备连接
android·java
YuTaoShao3 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表
铲子Zzz4 小时前
Java使用接口AES进行加密+微信小程序接收解密
java·开发语言·微信小程序
霖檬ing4 小时前
K8s——配置管理(1)
java·贪心算法·kubernetes
Vic101014 小时前
Java 开发笔记:多线程查询逻辑的抽象与优化
java·服务器·笔记
Biaobiaone4 小时前
Java中的生产消费模型解析
java·开发语言