Go语言中“糟糕”的日期时间格式化设计
温馨提醒
趁着周末的闲暇时间,着手对许久未更新维护的
hugo-theme-next
主题进行相关Issues的修复和优化,其中有块与文章更新时间相关的问题:
#109
,修复时正好发现配置文件中的日期时间格式化有点不宜理解,本来想对它做下调整改进,但却是结果遇到莫明奇妙的错误,深入了解一番才发现,这是Go语言的设计规范要求。好吧,也很是无奈啦。顺便也记录下对于Go语言中日期时间格式化的一些学习和理解,方便后续使用本主题用户阅读与参考。
与其他编程语言不同的是,在Go语言中对日期时间的格式处理,是使用的特定一组数字来代表,而不是大家平时所常见到的yyyy、MM、dd、HH、mm、ss等。在Go语言中使用2006-01-02 15:04:05这个时间模板作为格式化依据,其中各部分数字对应的含义说明参考如下:
| 模板部分 | 说明 | 示例 | 
|---|---|---|
| 2006 | 4位数年份 | 2024 | 
| 06 | 2位数年份(最后两位) | 24 | 
| 01 | 月份(用两位数表示,1月) | 01 | 
| 1 | 月份(用一位数表示) | 1 | 
| 02 | 日(用两位数表示,2号) | 02 | 
| 2 | 日(用一位数表示) | 2 | 
| 15 | 小时(24小时制) | 15 | 
| 03 | 小时(12小时制,前面补零) | 03 | 
| 3 | 小时(12小时制,不补零) | 3 | 
| 04 | 分钟(两位数) | 04 | 
| 05 | 秒(两位数) | 05 | 
| PM | 上下午 | PM | 
| pm | 上下午(小写) | pm | 
| -07:00 | 时区偏移 | -08: 00 | 
| MST | 时区名 | UTC | 
不过Go语言对于日期时间格式化的这种设计风格,确实有些令人无语,但只能是自己慢慢理解和适应。可以尝试通过掌握以下几点会帮助更快适应:
- 记住基础时间2006-01-02 15:04:05,它是所有模板的起点;
- 使用24小时制时,用15表示;使用12小时制时,用03表示;
- 要加上AM/PM时,用大写或小写的PM。
- 时区信息用 -07:00表示偏移,用MST表示缩写。
- **最重要的:**模板中的数字部分不能任意乱写,只能调整顺序或是连接符号;
另外在
Go语言官方文档
中有对日期时间格式常用模板的描述,有需要使用的小伙伴可以自行翻阅一下。
参考上面对Go语言日期时间格式化的学习,将本站点的日期和时间模板更新为中国标准时区的24小时制,配置如下: