溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang解析mongodb中的ISODate類型

發(fā)布時(shí)間:2020-06-29 10:12:52 來(lái)源:網(wǎng)絡(luò) 閱讀:2720 作者:梅花老K 欄目:MongoDB數(shù)據(jù)庫(kù)

在golang中可以使用time.Time數(shù)據(jù)類型來(lái)保存mongodb中的ISODate時(shí)間。

g

type Model struct {
    uploadDate time.Time `bson:"uploadDate"`
}
m := Model{}
if err := c.Find(nil).Select({"_id": 0, "uploadDate": 1}).One(&m); err != nil {
    fmt.Printf("failed to find date, error %s\n", err)
    os.Exit(1)
}
fmt.Printf("%+v\n", m)

從輸出中可以看到golang輸出的時(shí)間格式是CST時(shí)區(qū),golang在處理的過(guò)程中將ISO時(shí)間轉(zhuǎn)換成了CST時(shí)間,從時(shí)間面板上來(lái)看也比mongodb中的快上8個(gè)小時(shí),這個(gè)是正常的。


那么golang做插入操作或者時(shí)間比較操作的時(shí)候需要自己轉(zhuǎn)換時(shí)間戳嗎?答案是不需要的,來(lái)看下插入的例子。

重新插入一條記錄,記錄的Time字段為當(dāng)前時(shí)間,在golang中可以通過(guò)time.Now獲取當(dāng)前時(shí)間,查看輸出可以看到是CST的時(shí)間格式。

now := time.Now()
fmt.Printf("%+v\n", now)
// output: 2016-05-12 14:34:00.998011694 +0800 CST
err = c.Insert(Model{Time: now})
if err != nil {
    panic(err)
}

可以看到存儲(chǔ)到mongodb中時(shí)間的自動(dòng)轉(zhuǎn)換為了ISO時(shí)間,時(shí)間少了8個(gè)小時(shí)。小結(jié)一下就是golang和mongodb中的時(shí)間交互不需要考慮額外的東西,因?yàn)轵?qū)動(dòng)都進(jìn)行了轉(zhuǎn)換。


有時(shí)我們會(huì)將time.Time的時(shí)間以字符串的形式存儲(chǔ),那么要和mongodb交互的時(shí)候就需要轉(zhuǎn)換time.Time格式

timeString := "2016-05-12 14:34:00.998011694 +0800 CST"
t, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", timeString)
if err != nil {
    panic(err)
}
fmt.Printf("%+v\n", t)

代碼中比較難理解的就是time.Parse的第一個(gè)參數(shù),這個(gè)其實(shí)是golang當(dāng)中的定義,詳細(xì)看下time.Time.String()的源碼就會(huì)明白了。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI