您好,登錄后才能下訂單哦!
在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ì)明白了。
免責(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)容。