2 回答
TA贡献1757条经验 获得超8个赞
您可以定义自己的time支持这两种格式的字段类型:
type MyTime struct {
time.Time
}
func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
s := string(b)
// Get rid of the quotes "" around the value.
// A second option would be to include them
// in the date format string instead, like so below:
// time.Parse(`"`+time.RFC3339Nano+`"`, s)
s = s[1:len(s)-1]
t, err := time.Parse(time.RFC3339Nano, s)
if err != nil {
t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
}
self.Time = t
return
}
type Test struct {
Time MyTime `json:"time"`
}
Try on Go Playground
在上面的示例中,我们采用了预定义的格式time.RFC3339Nano,其定义如下:
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
并删除:
"2006-01-02T15:04:05.999999999Z0700"
time.Parse此处描述了 此时间格式: https ://golang.org/pkg/time/#pkg-constants
另请参阅time.Parse https://golang.org/pkg/time/#Parse的文档
PS2006时间格式字符串中使用年份可能是因为Golang的第一个版本是在那一年发布的。
TA贡献1833条经验 获得超4个赞
你可以试试https://play.golang.org/p/IsUpuTKENg
包主
进口 (
“fmt”
“时间”
)
功能主要(){
t, err := time.Parse("2006-01-02T15:04:05.999999999Z0700", "2016-08-08T21:35:14.052975-0200")
如果错误!= nil {
恐慌(错误)
}
fmt.Println(t)
}
- 2 回答
- 0 关注
- 245 浏览
添加回答
举报