在golang中可以使用time.Time數(shù)據(jù)類型來(lái)保存MongoDB中的ISODate時(shí)間。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供同安企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、做網(wǎng)站、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為同安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
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ì)明白了。
文章題目:golang解析mongodb中的ISODate類型
文章地址:http://newbst.com/article14/jhcpge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化、電子商務(wù)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)