2 回答
TA贡献1806条经验 获得超5个赞
mgo 自动转换time.Time为 Mongo 内部日期数据类型(source,实际上它只是一个没有时区信息的时间戳,并且总是更正为 UTC)。任何其他功能都必须由您手动实现。
您可以通过实现包中的Getter和Setter接口来强制 mgo 正确(反)序列化您的类型,因为包mgo/bson认为它非常低级,所以要小心。
TA贡献1784条经验 获得超8个赞
您应该定义一个像这样保存时区的自定义结构。
您可以定义一个自定义Unmarshal来更改加载日期的位置。
func (t *TimeWithTimezone) Unmarshal(in []byte, out interface{}) (err error) {
type decode TimeWithTimezone
var d decode
if err := bson.NewDecoder(in).Decode(&d); err != nil {
return err
}
loc, err := FixedZone(d.Timezone, d.Timezone)
if err != nil {
return fmt.Errorf("Invalid Timezone: %s", d.Timezone)
}
t.Time = d.Time.In(loc)
t.Timezone = d.Timezone
return nil
}
像这样的东西应该可以解决问题,它没有经过测试,只是为了给你一个想法!
- 2 回答
- 0 关注
- 398 浏览
添加回答
举报
