news 2026/3/28 8:10:38

为啥yyyy-MM-dd HH:mm:ss的MM和HH设计为大写

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为啥yyyy-MM-dd HH:mm:ss的MM和HH设计为大写

yyyy-MM-dd HH:mm:ss中的大写MMHH是 Java 日期格式化中的约定,原因如下:

1.区分不同的时间单位(主要目的)

月份 (Month) vs 分钟 (Minute)

// 大写的 M 表示月份 (Month)// 小写的 m 表示分钟 (minute)SimpleDateFormatsdf1=newSimpleDateFormat("MM");// 月份,如 12SimpleDateFormatsdf2=newSimpleDateFormat("mm");// 分钟,如 30// 如果混淆会出问题SimpleDateFormaterrorFormat=newSimpleDateFormat("mm-dd");// 这会被解析为 "分钟-天",而不是 "月-日"

24小时制 vs 12小时制

// 大写的 H 表示 24小时制 (0-23)// 小写的 h 表示 12小时制 (1-12)SimpleDateFormatsdf1=newSimpleDateFormat("HH:mm");// 24小时制,如 14:30SimpleDateFormatsdf2=newSimpleDateFormat("hh:mm a");// 12小时制,如 02:30 PM

2.历史沿袭和标准统一

源自 Unix/C 的 strftime 函数

// C语言中的时间格式化strftime(buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo);// %Y: 年份,%m: 月份,%d: 日期,%H: 24小时,%M: 分钟,%S: 秒

Java 沿用了这个传统

// Java 1.0 开始就采用了类似的格式// 保持与 C/Unix 和其他语言的一致性

3.完整的格式化字符对照表

字符含义示例说明
y年份 Yearyyyy → 2024小写
M月份 MonthMM → 12大写,区别于分钟
d日期 Daydd → 25小写
H小时 Hour(24h)HH → 14大写,24小时制
h小时 Hour(12h)hh → 02小写,12小时制
m分钟 Minutemm → 30小写
s秒 Secondss → 45小写
S毫秒SSS → 789大写
a上午/下午a → PM小写

4.实际使用示例

importjava.text.SimpleDateFormat;importjava.util.Date;publicclassDateFormatExample{publicstaticvoidmain(String[]args){Datenow=newDate();// 正确:月份用大写 MM,24小时制用大写 HHSimpleDateFormatcorrectFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("正确格式: "+correctFormat.format(now));// 输出: 2024-12-17 14:30:45// 错误示例1:月份用小写 mm(会被解析为分钟)SimpleDateFormaterror1=newSimpleDateFormat("yyyy-mm-dd HH:mm:ss");System.out.println("错误格式1: "+error1.format(now));// 输出可能: 2024-30-17 14:30:45 (月份变成了分钟数)// 错误示例2:小时用小写 hh(12小时制,没有AM/PM会出错)SimpleDateFormaterror2=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");System.out.println("错误格式2: "+error2.format(now));// 输出可能: 2024-12-17 02:30:45 (下午2点变成了2点)// 12小时制的正确写法SimpleDateFormattwelveHourFormat=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss a");System.out.println("12小时制: "+twelveHourFormat.format(now));// 输出: 2024-12-17 02:30:45 PM}}

5.为什么这样设计?

避免歧义

// 假设都用小写,会有歧义"yyyy-mm-dd hh:mm:ss"// 这到底是 "年-分钟-日 小时:分钟:秒" 还是 "年-月-日 小时:分钟:秒"?// 无法区分月份和分钟!// 使用大小写区分后"yyyy-MM-dd HH:mm:ss"// 明确:年-月-日 24小时:分钟:秒"yyyy-mm-dd hh:mm:ss"// 明确:年-分钟-日 12小时:分钟:秒

便于记忆

  • 大写 M→ Month(月份)→ 首字母大写
  • 大写 H→ 24小时制(Hour in day,0-23)
  • 小写 h→ 12小时制(hour in am/pm,1-12)

扩展性

// 还有其他大小写区分SimpleDateFormatsdf1=newSimpleDateFormat("DDD");// 一年中的第几天SimpleDateFormatsdf2=newSimpleDateFormat("ddd");// 星期几的缩写SimpleDateFormatsdf3=newSimpleDateFormat("EEE");// 星期几的全称SimpleDateFormatsdf4=newSimpleDateFormat("eee");// 本地化的星期几
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 7:44:20

小程序毕设项目:基于springboot+微信小程序的宠物服务系统小程序(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/27 16:44:39

2025 年 IT 转行选什么?网络安全为何是首选方向?

2025年IT转行就业为什么首先要选网络安全? 记得曾经有人说过这样一个俗语:三百六十行,行行转IT。或许听到这个话的时候会觉得是一句玩笑话,但是浏览到网络上一些关于就业的文章,就能够明白这句话的真正意义所在。随着…

作者头像 李华
网站建设 2026/3/28 10:48:17

小白必看 SQL 注入教程:详细图解 + 基础原理,核心逻辑一看就懂

一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。 二、Web 程序三层架构 三层架构(3-tier architecture) 通常意义上就…

作者头像 李华
网站建设 2026/3/27 11:11:44

【ACWing】153. 双栈排序

题目地址: https://www.acwing.com/problem/content/description/155/ Tom最近在研究一个有趣的排序问题。通过 2 2 2个栈S1和S2,Tom希望借助以下 4 4 4种操作实现将输入序列升序排序。 操作a:如果输入序列不为空,将第一个元素…

作者头像 李华
网站建设 2026/3/26 8:54:33

大数据架构自动化运维:从部署到扩缩容

大数据架构自动化运维:从部署到扩缩容关键词:大数据运维、自动化部署、弹性扩缩容、监控告警、AIOps摘要:本文从“开一家永远不打烊的智能餐厅”的生活场景切入,用通俗易懂的语言讲解大数据架构自动化运维的核心逻辑。我们将一步一…

作者头像 李华
网站建设 2026/3/27 7:06:16

位运算求解八皇后问题:极致优雅的性能优化之道

八皇后问题是计算机科学中的经典回溯算法案例,但在大规模棋盘时性能瓶颈明显。今天我们来介绍一种高效优雅的位运算解法,它不仅能大幅提升性能,还能让代码更加简洁清晰。一、位运算基础:八皇后必备的位操作技巧在深入八皇后问题之…

作者头像 李华