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

我对 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 UTC


2014-10-11 23:10:50.399 -0500 CDT


看来 mgo 驱动程序可能会自动转换它,因为当我从控制台窗口查询 mongodb 时,我的日期是 UTC。我是否在某处错过了关闭此功能的 mgo 选项?


BIG阳
浏览 385回答 2
2回答

有只小跳蛙

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 返回的值可能不等于您存储的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go