背景
我正在学习 Go,并且正在尝试对日期时间进行一些 JSON 解组。
我有一些由我用 C 编写的程序生成的 JSON,我正在输出我认为是有效的ISO8601 / RFC3339时区偏移量。我正在使用strftime以下格式字符串:
%Y-%m-%dT%H:%M:%S.%f%z
(请注意,本机%f不支持strftime,我有一个用纳秒替换它的包装器)。
这将产生以下结果:
2016-08-08T21:35:14.052975+0200
然而,在 Go 中解组这个是行不通的:https: //play.golang.org/p/vzOXbzAwdW
package main
import (
"fmt"
"time"
)
func main() {
t, err := time.Parse(time.RFC3339Nano, "2016-08-08T21:35:14.052975+0200")
if err != nil {
panic(err)
}
fmt.Println(t)
}
输出:
panic: parsing time "2016-08-08T21:35:14.052975+0200" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "+0200" as "Z07:00"
(工作示例: https: //play.golang.org/p/5xcM0aHsSw)
这是因为RFC3339 期望时区偏移量采用02:00带有 a的格式:,但strftime将其输出为0200.
所以我需要在我的 C 程序中修复这个问题以输出正确的格式。
%z The +hhmm or -hhmm numeric timezone (that is, the hour and
minute offset from UTC). (SU)
题
但是,现在我有一堆格式不正确的 JSON 文件:
2016-08-08T21:35:14.052975+0200
而不是正确的(:在时区偏移中):
2016-08-08T21:35:14.052975+02:00
但我仍然希望能够在我的 Go 程序中正确解组它。最好是只有这种差异的两个不同的 JSON 文件应该以完全相同的方式解析。
关于封送回 JSON,应使用正确的格式。
这就是我在我的struct:
Time time.Time `json:"time"`
所以问题是,这样做的“Go”方式是什么?
同样在我的代码示例中,我正在使用RFC3339Nano. 我如何在结构的元数据中指定它?正如我现在所拥有的那样,它json:"time"会忽略纳秒吗?
陪伴而非守候
潇潇雨雨
相关分类