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

相关推荐
BullSmall4 分钟前
SonarQube 9.9.8-community 适配 Jenkins 版本说明
java·前端·jenkins
威哥爱编程5 分钟前
【AI全栈12-10】Spring Boot 用多模态做商品图审核 / 发票识别
java·spring boot·后端
轮子大叔13 分钟前
Java8和Java17常见区别
java
威哥爱编程14 分钟前
【AI全栈12-09】Spring Boot 用流式输出做打字机对话:点下去不再干等
java·spring boot·后端
威哥爱编程17 分钟前
【AI全栈12-08】Spring Boot 用 MCP 统一接入内部系统:让 AI 接一次,全公司复用
java·spring boot·后端
deviant-ART18 分钟前
Java 并发编程:深入理解 synchronized 的使用与原理
java·开发语言·后端
斯内普吖19 分钟前
(开源)校园充电宝租借管理系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
爱喝热水的呀哈喽23 分钟前
hm探查。
java·前端·人工智能
代码什么用33 分钟前
Java Web 21-22
java·开发语言·web
灯澜忆梦1 小时前
【Linux】#5 | 文件与目录基础操作命令
java·linux·运维