【发布时间】:2016-11-30 11:13:31
【问题描述】:
我知道我需要在 Go 中使用时间布局(如此处所示 https://golang.org/src/time/format.go),但我找不到 ISO 8601 时间戳的布局。
如果有帮助,我会从 Facebook API 获取时间戳。这是一个示例时间戳:2016-07-25T02:22:33+0000
【问题讨论】:
我知道我需要在 Go 中使用时间布局(如此处所示 https://golang.org/src/time/format.go),但我找不到 ISO 8601 时间戳的布局。
如果有帮助,我会从 Facebook API 获取时间戳。这是一个示例时间戳:2016-07-25T02:22:33+0000
【问题讨论】:
我发现这个布局可以工作:"2006-01-02T15:04:05-0700"
【讨论】:
time.RFC3339 不起作用,但这种布局有效。
time.RFC3339 不适用于 ISO 8601。示例:play.golang.org/p/gIi7D5KuWa
RFC3339 相当于 ISO 8601。具体来说,格式相同,RFC3339 只是有更严格的要求(例如,它需要完整的 4 位数年份的日期表示)。
What's the difference between ISO 8601 and RFC 3339 Date Formats?
所以你可以使用常量time.RFC3339 作为你的布局。
【讨论】:
这里的问题是RFC3339 requires 区域偏移量被指定为“+00:00”(或在 UTC 的情况下为“Z”),而 ISO8601 允许它为“+0000”。
来自RFC3339:
[...] time-numoffset = ("+" / "-") time-hour ":" time-minute time-offset = "Z" / time-numoffset [...] full-time = partial-time time-offset date-time = full-date "T" full-time
所以而不是 time.RFC3339 布局
"2006-01-02T15:04:05Z07:00"
你必须使用:
"2006-01-02T15:04:05Z0700"
【讨论】:
您可以使用日期的某些布局。
data := "2022-01-24T00:00:00.000-03:00"
layout := "2006-01-02T15:04:05.000-03:00"
dataTime, err := time.Parse(layout, data)
【讨论】: