
本文介绍如何使用 Go 的 time.Parse() 函数正确解析类似 “February 24, 2017 , 1:44 pm” 这样的非标准英文日期时间字符串,关键在于匹配 Go 独特的参考时间格式。
本文介绍如何使用 go 的 `time.parse()` 函数正确解析类似 “february 24, 2017 , 1:44 pm” 这样的非标准英文日期时间字符串,关键在于匹配 go 独特的参考时间格式。
Go 语言中解析时间字符串必须严格遵循其固定的参考时间格式:Mon Jan 2 15:04:05 MST 2006(即 Unix 时间戳 1136239445 对应的本地时间)。因此,不能直接使用常见 ISO 格式(如 "2006-01-02 15:04:05")去匹配英文月份和 AM/PM 表达,而需构造语义对齐的布局字符串。
对于输入字符串 February 24, 2017 , 1:44 pm,对应的标准布局应为:
layout := "January 2, 2006 , 3:04 pm"
t, err := time.Parse(layout, "February 24, 2017 , 1:44 pm")
if err != nil {
log.Fatal(err)
}
fmt.Println(t) // 输出:2017-02-24 13:44:00 +0000 UTC
注意以下关键点:
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
-
January表示英文全称月份(区分大小写),2表示无前导零的日期; -
2006是年份占位符,不可替换为其他数字; -
3:04 pm中3表示 12 小时制小时(无前导零),pm必须小写且与输入一致(若输入为PM,布局中也需写PM); - 空格、逗号、空格等分隔符必须与原始字符串完全一致(包括多余的空格,如
,后的空格)。
此外,time.Parse() 默认按 time.UTC 解析。如需指定时区(例如本地时区或 America/New_York),可先用 time.ParseInLocation(),或在解析后调用 .In(loc) 转换:
loc, _ := time.LoadLocation("America/New_York")
t = t.In(loc)
总结:Go 时间解析的核心是「布局即模板」——它不是格式描述,而是参考时间的字面镜像。务必逐字符比对输入字符串与布局字符串,尤其注意空格、大小写和 AM/PM 的书写形式,这是避免 parsing time xxx: month unknown 或 cannot parse 错误的关键。










