MMM MMMMMMMMM 日期格式含义解析
作者:小宇宙叶知秋
时间:2026-04-20
浏览:6
在Android的SimpleDateFormat中,MMMMMMMMM并非特殊语法,而是等价于单个MMMM——即表示完整的月份名称(如"October"),多余字母仅被忽略,属于冗余但合法的写法。
本文目录

在 Android 的 SimpleDateFormat 中,MMMMMMMMM 并非特殊语法,而是等价于单个 MMMM——即表示完整的月份名称(如 "October"),多余字母仅被忽略,属于冗余但合法的写法。
在 Android 的 `SimpleDateFormat` 中,`MMMMMMMMM` 并非特殊语法,而是等价于单个 `MMMM`——即表示**完整的月份名称**(如 "October"),多余字母仅被忽略,属于冗余但合法的写法。
SimpleDateFormat 对模式字母的处理遵循“最小必要匹配”原则:它只关心字母的类型(M 表示月份)和数量级(M、MM、MMM、MMMM 分别对应不同宽度),而不校验重复次数是否精确。
具体规则如下:
- M 或 MM → 数字月份(1 或 01)
- MMM → 短月份缩写(Oct)
- MMMM → 完整月份名称(October)
- MMMMM 及以上(如 MMMMMMMMM)→ 仍视为 MMMM,JDK 和 Android 的实现均会忽略超出部分,按完整名称解析
因此,以下写法效果完全相同:
new SimpleDateFormat("MMMM dd, yyyy K:mm a", Locale.ROOT); // 推荐:语义清晰、符合规范
new SimpleDateFormat("MMMMMMMMM dd, yyyy K:mm a", Locale.ROOT); // 合法但冗余,可读性差⚠️ 注意事项:
- K 表示 hour in am/pm (0–11),配合 a(AM/PM)使用是正确的(08:15 PM → K=8);若误用 H(0–23 小时),会导致 08:15 PM 解析为 8 而非 20,引发逻辑错误。
- Locale.ROOT 是中立区域设置,确保月份名严格按英文输出(如 "October"),避免因设备系统语言导致解析失败。
- 在新项目中,强烈建议迁移到 java.time API(Android API 26+ 原生支持,低版本可通过 ThreeTenABP 兼容):
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy h:mm a", Locale.ENGLISH); LocalDateTime dt = LocalDateTime.parse("October 08, 2021 08:15 PM", formatter);
总结:MMMMMMMMM 不是神秘格式,而是开发者无意中写的冗余模式——它能工作,但应简化为 MMMM 以提升可维护性与可读性。在日期处理中,语义明确、符合规范的写法远比“能跑通”更重要。
作者最新文章
Excel单元格内换行教程:Alt+Enter快捷键与自动换行设置
2026-10-30 18:49
3DMax材质贴图浏览器怎么打开
2026-10-29 12:08
blender几何节点功能怎么开启教程界面入口与启用步骤
2026-10-18 13:20
PDF删页删错怎么找回?PDF删页报参数错误怎么办?
2026-10-17 11:21
蚂蚁庄园1月18日:人们常用砸锅来形容事情没办成猜猜最早源于哪个行业
2026-09-24 16:59
上一篇:
Win10清理磁盘垃圾方法_快速教程
下一篇:
Go语言Map类型详解与应用技巧
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多

































