12 小时制与 24 小时制:怎么换算不出错
12 小时制与 24 小时制之间的换算只有两条规则,但绝大多数人学得并不牢。规则本身很简单,真正让人翻车的是 12 点这个边界——在这里,「加 12」和「减 12」两种直觉都是错的。
下面把整套规则讲完,包括最容易出错的那一段。

保罗·乌切洛绘制的 24 小时钟,佛罗伦萨圣母百花大教堂,CC0 授权照片,来自 Wikimedia Commons
两条规则
对于 1:00 到 11:59 之间的任何时刻:
- 12 小时制 → 24 小时制,下午(PM): 加 12。下午 3:40 变成 15:40。
- 12 小时制 → 24 小时制,上午(AM): 不变。上午 3:40 仍是 03:40。
- 24 小时制 → 12 小时制: 小时数 ≥ 13 就减 12 并标 PM;小时数在 00 到 11 之间就保留并标 AM。
这覆盖了 24 小时里的 23 个。剩下那一个小时是 12 点,两条规则都不适用。
12 点这个坑
12 AM 是午夜,12 PM 是正午。 这一点反直觉,也是整个体系里最常见的错误来源。
道理是这样的:AM 是 ante meridiem,「正午之前」;PM 是 post meridiem,「正午之后」。午夜是一天的起点,因此它落在「正午之前」这一半的最开头——12 AM。正午是上午的终点,因此它落在「正午之后」这一半的最开头——12 PM。
换成 24 小时制:
| 12 小时制 | 24 小时制 | 是什么 |
|---|---|---|
| 12:00 AM | 00:00 | 午夜,一天的开始 |
| 12:01 AM | 00:01 | 刚过午夜 |
| 12:00 PM | 12:00 | 正午 |
| 12:01 PM | 12:01 | 刚过正午 |
| 12:00 AM(次日) | 24:00 或 00:00 | 当天结束/次日开始 |
所以「PM 就加 12」这条规则只有一个例外:12 PM 仍然是 12。而「24 小时制减 12」这条规则也只有一个例外:00:xx 变成 12:xx AM,不是 0:xx AM。
完整换算表
| 12 小时制 | 24 小时制 | 12 小时制 | 24 小时制 |
|---|---|---|---|
| 12:00 AM | 00:00 | 12:00 PM | 12:00 |
| 1:00 AM | 01:00 | 1:00 PM | 13:00 |
| 2:00 AM | 02:00 | 2:00 PM | 14:00 |
| 3:00 AM | 03:00 | 3:00 PM | 15:00 |
| 4:00 AM | 04:00 | 4:00 PM | 16:00 |
| 5:00 AM | 05:00 | 5:00 PM | 17:00 |
| 6:00 AM | 06:00 | 6:00 PM | 18:00 |
| 7:00 AM | 07:00 | 7:00 PM | 19:00 |
| 8:00 AM | 08:00 | 8:00 PM | 20:00 |
| 9:00 AM | 09:00 | 9:00 PM | 21:00 |
| 10:00 AM | 10:00 | 10:00 PM | 22:00 |
| 11:00 AM | 11:00 | 11:00 PM | 23:00 |
注意这个对称性:上午 1 点对应 13:00,上午 2 点对应 14:00,一直到上午 11 点对应 23:00。一旦看出「下午就是上午加 12」,整张表就压缩成了一条关系。
各地分别用哪种
24 小时制是交通运输、广播电视、计算机和军事领域的通用格式,也是欧洲大部分地区、拉美、中国、日本、韩国的默认书写形式。它彻底消除了歧义——不存在「到底哪个 7 点」。
12 小时制是美国、加拿大(法语语境中同时使用 24 小时制)、澳大利亚、新西兰、印度、菲律宾的日常书写与口语形式,英国在非正式场合也常用。英式英语里常写成「3.40pm」,用点号分隔且不加空格。
军事与航空使用压缩写法:1500 读作「fifteen hundred」,0900 读作「oh nine hundred」。书写时省略冒号,有时附带时区后缀,例如表示 UTC 的 Z(Zulu time)。
把 24 小时制读出声
在使用 24 小时制的国家,实际困难往往不在换算而在口述。几条惯例:
- 00:00——读「零点」或「午夜」。
- 09:05——军事风格读「oh nine oh five」;日常口语中多数语言读「九点零五」。
- 15:40——读「十五点四十」,而不是「下午三点四十」。
- 24:00——在时刻表中合法,表示当天结束,等价于次日 00:00。
常见的五类错误
- 以为 12 PM 是午夜。 它是正午。这个错误会直接写进机票订单。
- 写成 13:00 PM。 冗余——13:00 已经表示下午了。两套体系选一套。
- 把 12:30 PM 换算成 24:30。 没有 24:30 这个东西。12:30 PM 就是 12:30。
- 省掉前导零。 09:00 和 9:00 表示同一时刻,但按文本排序时不是——「10:00」会排在「9:00」前面。凡是要排序的数据都补上前导零。
- 把 24:00 和 00:00 当成两个不同时刻。 它们是同一个瞬间,只是从两个方向表述。
实际会用到的地方
时间戳、日志、列车时刻表和 API 返回值几乎都是 24 小时制,而且常常是 UTC。时间戳转换器会把两种形式并排显示,是核对不确定数值最快的办法。
如果要做跨 12/24 边界的时长加减,先在 24 小时制下算完再转回去,能完全避开「跨零点」的错误。时间计算器直接支持这种算法。
至于完全不涉及 AM/PM 判断的表盘,数字时钟可以在两种格式之间切换。