Go内置时间常量格式(time包)对照表
Go 时间布局格式
Go 使用 参考时间 Mon Jan 2 15:04:05 MST 2006 来定义格式,而不是像 C 语言或 Python 的 %Y %m %d。
| 类型 | 标记 | 含义 | 示例(参考时间 2025-09-06 11:45:05.123456789) | 注意事项 |
|---|---|---|---|---|
| 年 | 2006 | 四位年份 | 2025 | 常用于完整年份显示 |
06 | 两位年份 | 25 | 适合老式格式或节省字符 | |
| 月 | 01 | 两位数字月份 | 09 | 0 填充 |
1 | 数字月份(无前导零) | 9 | 方便简写 | |
Jan | 英文缩写月份 | Sep | 三个字母英文缩写 | |
January | 英文全称月份 | September | 更易读,长度可变 | |
| 日 | 02 | 两位数字日 | 06 | 0 填充 |
_2 | 空格填充日 | 6 | 用于对齐,日<10时左侧空格 | |
| 小时 | 15 | 24 小时制 | 11 | 0-23 |
03 | 12 小时制 | 11 | 0-12,0 会显示为 12 | |
3 | 12 小时制,无前导零 | 11 | 0-12 | |
| 分钟/秒 | 04 | 分钟 | 45 | 两位数字 |
05 | 秒 | 05 | 两位数字 | |
| 上下午 | PM | 大写 AM/PM | AM | 12 小时制,区分大小写 |
pm | 小写 am/pm | am | 12 小时制,区分大小写 | |
| 时区 | MST | 时区缩写 | SGT / CST / UTC | 受系统时区影响,可能有歧义 |
-0700 | 数值时区偏移(无冒号) | +0800 | 可解析性高,推荐用于存储/传输 | |
Z07:00 | 数值时区偏移(含冒号) | +08:00 或 Z(UTC) | RFC3339 常用 | |
| 字面量 | 普通字符 | 未被识别为时间占位符的字符按字面量输出 | "UTC 2006" → UTC 2025 | 单引号不是转义语法,只是普通字符 |
| 小数秒 | .000 | 毫秒 | .123 | 固定 3 位小数 |
.000000 | 微秒 | .123456 | 固定 6 位小数 | |
.000000000 | 纳秒 | .123456789 | 固定 9 位小数 | |
| 星期 | Mon | 英文缩写星期 | Sat | 三个字母 |
Monday | 英文全称星期 | Saturday | 适合全名显示 | |
| 其他符号 | T | ISO 8601 中的时间分隔符 | T | 直接输出字母 T |
- / : | 直接输出 | -、/、: | 可以自由组合布局 |
注意事项
- 空格填充 vs 零填充:
_2→ 空格填充的日,02→ 零填充。
- 时区选择:
MST→ 缩写,易读但解析可能歧义。-0700/Z07:00→ 数值偏移,更标准、更安全。
- 12 小时制 vs 24 小时制:
3/03→ 12 小时制,配合PM/pm。15→ 24 小时制。
- 小数秒:
StampMilli/StampMicro/StampNano都基于.000/.000000/.000000000。
Go time 包时间格式常量
1 | package time |
Go time 包时间格式常量对照表
| 名称 | 布局字符串 | 示例输出(2025-09-06 11:45:05 +08:00) | 典型用途 | 注意事项 |
|---|---|---|---|---|
| Layout | 01/02 03:04:05PM '06 -0700 | 09/06 11:45:05AM '25 +0800 | Go 的参考布局示例,展示格式规则 | 实际项目中较少直接使用 |
| ANSIC | Mon Jan _2 15:04:05 2006 | Sat Sep 6 11:45:05 2025 | 类 Unix 日志/老式系统 | _2 表示空格填充日期 |
| UnixDate | Mon Jan _2 15:04:05 MST 2006 | Sat Sep 6 11:45:05 SGT 2025 | 类 Unix 日期(带时区缩写) | MST 会替换为实际时区缩写,可能有歧义 |
| RubyDate | Mon Jan 02 15:04:05 -0700 2006 | Sat Sep 06 11:45:05 +0800 2025 | Ruby 默认日期格式 | 使用数值时区,无歧义 |
| RFC822 | 02 Jan 06 15:04 MST | 06 Sep 25 11:45 SGT | 老邮件标准 | 两位年份+时区缩写,解析不安全 |
| RFC822Z | 02 Jan 06 15:04 -0700 | 06 Sep 25 11:45 +0800 | RFC822 数值时区版 | 优于 RFC822,推荐 |
| RFC850 | Monday, 02-Jan-06 15:04:05 MST | Saturday, 06-Sep-25 11:45:05 SGT | 早期 HTTP/邮件日期 | 已过时 |
| RFC1123 | Mon, 02 Jan 2006 15:04:05 MST | Sat, 06 Sep 2025 11:45:05 SGT | 邮件/HTTP 历史格式 | HTTP 响应头建议使用 GMT 格式 |
| RFC1123Z | Mon, 02 Jan 2006 15:04:05 -0700 | Sat, 06 Sep 2025 11:45:05 +0800 | RFC1123 数值时区版 | 不符合 HTTP-date 对 GMT 的要求 |
| RFC3339 | 2006-01-02T15:04:05Z07:00 | 2025-09-06T11:45:05+08:00 | JSON / API 常用 | UTC 时输出 Z,否则 +HH:MM |
| RFC3339Nano | 2006-01-02T15:04:05.999999999Z07:00 | 2025-09-06T11:45:05.123456789+08:00 | 高精度 API 日志 | 输出到纳秒,0 的处理依版本不同 |
| Kitchen | 3:04PM | 11:45AM | 简洁 UI 时间显示 | 无秒、无日期 |
| Stamp | Jan _2 15:04:05 | Sep 6 11:45:05 | 简洁日志时间戳 | 无年、无时区 |
| StampMilli | Jan _2 15:04:05.000 | Sep 6 11:45:05.000 | 日志,带毫秒 | 固定 3 位小数 |
| StampMicro | Jan _2 15:04:05.000000 | Sep 6 11:45:05.000000 | 日志,带微秒 | 固定 6 位小数 |
| StampNano | Jan _2 15:04:05.000000000 | Sep 6 11:45:05.000000000 | 日志,带纳秒 | 固定 9 位小数 |
| DateTime | 2006-01-02 15:04:05 | 2025-09-06 11:45:05 | 数据库/日志常用 | 无时区,解析时需额外设定 |
| DateOnly | 2006-01-02 | 2025-09-06 | 仅日期字段 | 常见于表单、数据库 |
| TimeOnly | 15:04:05 | 11:45:05 | 仅时间字段 | 无日期、无时区 |
格式化输出测试
1 | package test |
输出结果:
1 | === RUN TestName |
0 评论