如何在GoLang中解析ISO 8601时间戳?

时间:2016-07-26 17:11:53

标签: go time timestamp

我知道我需要在GoLang中使用时间布局(如https://golang.org/src/time/format.go所示)但我找不到ISO 8601时间戳的布局。

如果有帮助,我会从Facebook API获取时间戳。以下是一个示例时间戳:2016-07-25T02:22:33+0000

5 个答案:

答案 0 :(得分:10)

我发现这个布局有效:“2006-01-02T15:04:05-0700”

答案 1 :(得分:1)

RFC3339等同于ISO 8601.具体来说,它具有相同的格式,RFC3339只有更严格的要求(例如,它需要一个完整的日期表示,年份为4位)。

What's the difference between ISO 8601 and RFC 3339 Date Formats?

因此,您可以使用常量time.RFC3339作为布局。

答案 2 :(得分:1)

这里的问题是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"

答案 3 :(得分:0)

你必须使用日期的一些布局。

 data   := "2022-01-24T00:00:00.000-03:00"
 layout := "2006-01-02T15:04:05.000-03:00"

 dataTime, err :=  time.Parse(layout, data)

答案 4 :(得分:-3)

对于使用Swift 4进行Cocoa开发的任何人,在使用Date策略将.iso8601编码为JSON时:

let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
if let encodedData = try? encoder.encode(myStruct) {
    ...
}

在Go中解析它的正确格式字符串将是:

2006-01-02T15:04:05.99999Z07:00