如何使用DateTimeFormatter.ofPattern定制符合国人习惯的日期格式

轻墨大大_1475

轻墨大大_1475

2026-04-16

828人浏览

原创

datetimeformatter.ofpattern 直接用中文“年月日”会抛异常,因它只识别模式字母(如y/m/d),不识别未转义的中文字符;正确写法是用单引号包裹字面量,如"yyyy'年'mm'月'dd'日'",且中文星期、am/pm需配合.withlocale(locale.china)才能正常显示。

如何使用datetimeformatter.ofpattern定制符合国人习惯的日期格式

为什么 DateTimeFormatter.ofPattern 直接用中文“年月日”会抛异常

因为 DateTimeFormatter.ofPattern 默认不识别中文文字字面量(如“年”“月”“日”),它只解析预定义的模式字母(如 y、M、d)和 Unicode 字符。直接写 "yyyy年MM月dd日" 看似合理,但 Java 8+ 的默认实现会把“年”“月”“日”当作**未转义的非法字符**,抛出 DateTimeParseException 或编译期不报错、运行时报 IllegalArgumentException: Unknown pattern letter: 年。

解决办法是用单引号将中文文字包裹为字面量:

  • "yyyy'年'MM'月'dd'日'" ✅ 正确 —— 单引号内内容原样输出
  • "yyyy年MM月dd日" ❌ 错误 —— “年”被当成模式字母,无对应含义
  • 注意:单引号本身要成对出现,嵌套时需用两个单引号 '' 表示一个字面单引号

如何让星期几也显示为“星期一”“星期二”而非英文或数字

默认 EEEE 模式输出英文(如 “Monday”),即使系统 Locale 是中文,也不自动本地化中文星期——因为 DateTimeFormatter.ofPattern 本身**不依赖 Locale 渲染文字内容**,它只控制字段宽度和顺序;中文星期、月份名必须靠 DateTimeFormatter.withLocale() 显式指定。

正确组合方式:

  • 先用纯模式字符串定义结构,例如 "yyyy'年'MM'月'dd'日' EEEE"
  • 再链式调用 .withLocale(Locale.CHINA),否则 EEEE 仍输出英文
  • 完整写法:
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy'年'MM'月'dd'日' EEEE").withLocale(Locale.CHINA);
  • 验证:传入 LocalDate.of(2024, 6, 12) → 输出 "2024年06月12日 星期三"

“上午/下午”和12小时制怎么安全适配中文习惯

国人日常虽少用“上午8点”,但在某些表单、日志场景仍需显示。关键点在于:hh(12小时制)必须搭配 a(AM/PM 标记),且 a 的中文渲染同样依赖 Locale.CHINA。

  • 错误示范:"a hh:mm" → 不加 withLocale 会输出 “AM 08:30”
  • 正确写法:DateTimeFormatter.ofPattern("a hh:mm").withLocale(Locale.CHINA) → 输出 “上午 08:30”
  • 注意空格:模式中 a 和 hh 之间建议留空格,否则可能粘连成“上午08:30”,视觉不自然
  • 更推荐 24 小时制:HH:mm 更符合国内通用习惯(如交通、政务系统),避免歧义

为什么 DateTimeFormatter.ofPattern 不推荐用于解析含中文的字符串

虽然你能用 "yyyy'年'MM'月'dd'日'" 格式化输出,但反过来用它去 parse 用户输入的“2024年06月12日”,大概率失败——因为 parse 时单引号内的字面量必须**严格匹配**,而用户可能输“2024年6月12日”(无前导零)、“二〇二四年六月十二日”(汉字数字)、甚至“2024-06-12”(混用符号)。

  • DateTimeFormatter.ofPattern 是严格模式,不带智能容错
  • 真正需要解析中文日期时,应优先考虑正则预处理 + 分段提取,或使用 DateTimeFormatterBuilder 构建可选模式
  • 简单场景下,不如统一要求输入 ISO 格式(yyyy-MM-dd),后端用 DateTimeFormatter.ISO_LOCAL_DATE 解析更稳

定制格式的重点永远在“输出可控”,别高估它对非标输入的容忍度。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10857

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7982

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6912

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1416

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2869

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20151

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习