AM 和 PM 是拉丁语的缩写,用于区分 12 小时制中的上下午。
基本含义
缩写 | 拉丁语全称 | 中文含义 | 时间段 |
AM | Ante Meridiem | 中午之前 | 00:00 - 11:59(午夜到中午) |
PM | Post Meridiem | 中午之后 | 12:00 - 23:59(中午到午夜) |
Ante = 在...之前(如 antecedent 前因)
Post = 在...之后(如 postpone 推迟)
Meridiem = 中午(midday)
12 小时制 vs 24 小时制对比
| 24小时制 | 12小时制 | 显示结果 |
|---|---|---|
| 00:00 | 12:00 AM | 午夜(凌晨12点) |
| 01:00 | 1:00 AM | 凌晨1点 |
| 11:00 | 11:00 AM | 上午11点 |
| 12:00 | 12:00 PM | 中午12点(⚠️ 易错点) |
| 13:00 | 1:00 PM | 下午1点 |
| 23:00 | 11:00 PM | 晚上11点 |
⚠️ 常见误区
最容易搞错的是 12:00:
sql
-- 正确理解:12:00 AM = 午夜(一天开始) → 00:0012:00 PM = 中午 → 12:00-- 错误理解(很多人会犯):12:00 AM ≠ 中午 ❌12:00 PM ≠ 午夜 ❌
记忆技巧:
中午(noon)是太阳最高的时候,在中午之后(Post Meridiem)就是 PM
所以 12:00 PM = 中午
反过来,12:00 AM = 午夜
MySQL 中的使用示例
sql
-- 使用 %r 格式化时间SELECT DATE_FORMAT('2025-04-15 08:30:00', '%r') AS time_12h;-- 结果:08:30:00 AMSELECT DATE_FORMAT('2025-04-15 14:45:00', '%r') AS time_12h;-- 结果:02:45:00 PMSELECT DATE_FORMAT('2025-04-15 00:00:00', '%r') AS midnight;-- 结果:12:00:00 AMSELECT DATE_FORMAT('2025-04-15 12:00:00', '%r') AS noon;-- 结果:12:00:00 PMMySQL 中相关的格式符对比
| 格式符 | 输出示例 | 说明 |
|---|---|---|
%r | 02:30:45 PM | 12小时制完整时间(带 AM/PM) |
%T | 14:30:45 | 24小时制完整时间 |
%h | 02 | 12小时制小时(01-12) |
%H | 14 | 24小时制小时(00-23) |
%i | 30 | 分钟 |
%s | 45 | 秒 |
%p | PM | 仅 AM/PM 标识 |
组合使用示例
sql
-- 手动组合 12 小时制时间(等同于 %r)SELECT CONCAT( DATE_FORMAT(NOW(), '%h:%i:%s'), ' ', DATE_FORMAT(NOW(), '%p')) AS custom_time_12h;-- 直接使用 %r(更简洁)SELECT DATE_FORMAT(NOW(), '%r') AS time_12h;
实际应用场景
sql
-- 美式订单时间显示(常用于面向美国用户的系统)SELECT order_id, DATE_FORMAT(order_time, '%r') AS order_time_usFROM orderform;-- 输出示例:-- order_id | order_time_us-- 1001 | 02:30:15 PM-- 1002 | 09:15:22 AM
总结
AM = Ante Meridiem(中午之前)= 午夜到中午
PM = Post Meridiem(中午之后)= 中午到午夜
12:00 AM = 午夜(一天开始)
12:00 PM = 中午(⚠️ 最容易记错)
%r是 MySQL 中直接输出带 AM/PM 的 12 小时制时间的便捷格式符