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 么?

相关推荐
艾莉丝努力练剑9 分钟前
【Linux线程】Linux系统多线程(四):线程ID及进程地址空间布局,线程封装
java·linux·运维·服务器·c语言·c++·学习
有味道的男人11 分钟前
电商效率翻倍:用 Open Claw 对接 1688 接口,快速实现图片选品 + 货源监控
java·开发语言·数据库
cheems952721 分钟前
[SpringMVC] Spring MVC 留言板开发实战
java·spring·mvc
BioRunYiXue22 分钟前
AlphaGenome:DeepMind 新作,基因组学迎来 Alpha 时刻
java·linux·运维·网络·数据库·人工智能·eclipse
whatever who cares28 分钟前
android中,全局管理数据/固定数据要不要放一起?
android·java·开发语言
C1829818257533 分钟前
AI idea 集成claude code插件
java·ide·intellij-idea
IT 行者33 分钟前
解决 IntelliJ IDEA 内存占用高的两个优化策略:GPU 渲染与虚拟内存配置
java·ide·intellij-idea·ai编程
Aric_Jones35 分钟前
从实战理解异步、并发并行与GIL:FastAPI vs SpringBoot
java·spring boot·fastapi
云烟成雨TD39 分钟前
Spring AI 1.x 系列【27】Chat Memory API:让 LLM 拥有上下文记忆能力
java·人工智能·spring
渔民小镇40 分钟前
一次编写到处对接 —— 为 Godot/Unity/React 生成统一交互接口
java·分布式·游戏·unity·godot