2 回答
TA贡献1833条经验 获得超4个赞
JSON 需要引用字符串(在 JSON 中日期是一个字符串),但是您的MarshalJSON函数返回一个不带引号的字符串。
我稍微修改了您的代码,现在可以正常工作了:
package models
import (
"fmt"
"time"
)
type Tick struct {
time.Time
}
var format = "2006-01-02T15:04:05.999999-07:00"
func (t *Tick) MarshalJSON() ([]byte, error) {
// using `append` to avoid string concatenation
b := make([]byte, 0, len(format)+2)
b = append(b, '"')
b = append(b, t.Time.Format(format)...)
b = append(b, '"')
return b, nil
}
func (t *Tick) UnmarshalJSON(b []byte) (err error) {
b = b[1 : len(b)-1]
t.Time, err = time.Parse(format, string(b))
return
}
TA贡献1836条经验 获得超13个赞
好像您使用了错误的格式。Postgres 使用 RFC 3339,它已经在time
包中定义。这应该有效:
time.Parse(time.RFC3339, string(b))
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报