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

相关推荐
云烟成雨TD14 分钟前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白23 分钟前
苍穹外卖--day09
java·spring boot·百度
学代码的真由酱29 分钟前
Java多用户一对一网页聊天室-测试报告
java·开发语言·功能测试·测试
Jasonakeke1 小时前
SpringBoot自动配置原理揭秘
java·spring boot·后端
2301_803538952 小时前
Java读取Word图片的两种实用方法
java·开发语言·word
C+-C资深大佬2 小时前
SSM 框架(Spring + SpringMVC + MyBatis)
java·spring·mybatis
帅次2 小时前
Android 17 开发者实战:核心更新与应用场景落地指南
android·java·ios·android studio·iphone·android jetpack·webview
Ramble_Naylor2 小时前
东方通(TongWeb)SpringBoot开发指导
java·spring boot
大鹏说大话2 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
云烟成雨TD3 小时前
Spring AI Alibaba 1.x 系列【64】 ReactAgent 长期记忆
java·人工智能·spring