为了账号安全,请及时绑定邮箱和手机立即绑定

在golang中查询mongodb时如何获取UTC时间

在golang中查询mongodb时如何获取UTC时间

Go
BIG阳 2021-08-23 15:54:46
我对 Golang 和 MongoDB 比较陌生,遇到了一个日期问题,我似乎可以将 UTC 日期插入到 MongoDB 中,但是当我通过 Golang 查询时,它会自动转换为本地时间。我想在 UTC 中从 MongoDB 取回它而无需转换。这是一个快速示例:type SampleItem struct {    ObjId      bson.ObjectId `bson:"_id,omitempty" json:"-"`    SampleDate time.Time     `bson:"sampleDate" json:"sampleDate"`}func TestMe() {    var item SampleItem    var items []SampleItem    sess := getSession()    defer sess.Close()    item.SampleDate = time.Now().UTC()    fmt.Printf("%s\n", item.SampleDate)    collection := sess.DB("myCollection").C("sampleItems")    collection.Insert(item)    err := collection.Find(bson.M{}).All(&items)    if err == nil {        fmt.Printf("%s\n", items[0].SampleDate)    }}我的输出:2014-10-12 04:10:50.3992076 +0000 UTC2014-10-11 23:10:50.399 -0500 CDT看来 mgo 驱动程序可能会自动转换它,因为当我从控制台窗口查询 mongodb 时,我的日期是 UTC。我是否在某处错过了关闭此功能的 mgo 选项?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

Go time.Time值存储时间和位置的瞬间。mgo BSON 解码器将位置设置为time.Local。

您可以设置time.Local为 UTC 位置:

time.Local = time.UTC

设计给第三方使用的包不应该修改本地位置,但在应用程序范围内是可以的。

所述Time.UTC()方法在时间作为接收器和所述位置设置为UTC在同一时刻返回的时间。此行将以 UTC 格式打印时间:

    fmt.Printf("%s\n", items[0].SampleDate.UTC())

由于 MongoDB 存储时间的精度低于 time.Time,因此从 MongoDB 返回的值可能不等于您存储的值。


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信