Go中time.Parse使用固定参考时间“Mon Jan 2 15:04:05 MST 2006”作为layout模板,各字段对应周几、月份、日期、24小时制小时、分钟、秒、时区和年份,需严格按位置匹配;解析时须注意时区处理与错误检查。
在 Go 中用 time.Parse 解析时间字符串,关键不是记格式,而是理解 Go 独特的参考时间(Reference Time)——Mon Jan 2 15:04:05 MST 2006。这个固定时间串就是所有 layout 字符串的模板。
Go 不像其他语言用占位符(如 %Y-%m-%d),而是用一个真实、具体的例子作为布局参照。它的每个部分对应一个时间单位:
直接照着参考时间改写你的时间字符串结构即可:
"2006-01-02 15:04:05"(标准 ISO 格式,无时区)"2006/01/02"
"02-Jan-2006 15:04:05 MST"
"2006-01-02T15:04:05Z"(RFC3339 子集,Z 表示 UTC)"2006-01-02 15:04:05 -0700"(带数字时区偏移)time.Parse 默认使用本地时区解析,除非 layout 中明确包含时区信息(如 Z、MST 或 -0700)。建议显式指定时区或用 time.ParseInLocation 控制上下文:
time.ParseInLocation(layout, value, time.UTC)
间(CST)解析?可用 time.LoadLocation("Asia/Shanghai") 获取 location 后传入error:格式错、时区无效、日期非法(如 2025-02-30)都会失败如果手写 layout 容易出错,可以反向操作:先用 time.Now() 打印出目标格式,再把值替换成参考时间字段:
"23/04/2025 10:30:45",就写:fmt.Println(time.Now().Format("06/01/2006 15:04:05")) → 得到类似 "24/04/2025 10:30:45",然后把数字替成参考时间对应值:"02/01/2006 15:04:05" → 实际 layout 是 "02/01/2006 15:04:05"
02 永远是日,01 永远是月基本上就这些。记不住 layout?贴一张参考时间图在编辑器边栏,比背文档快得多。