golang字符串轉(zhuǎn)Time類型問題
最近在做項(xiàng)目中,遇到了golang 字符串轉(zhuǎn)Time類型的問題。調(diào)研后發(fā)現(xiàn)golang 提供了倆種方式,即time.Parse 跟 time.ParseInLocation。倆種方式 差距很大,用不好小心踩坑。
先上代碼:
結(jié)果:
不難發(fā)現(xiàn),倆種方式轉(zhuǎn)換后的時(shí)間戳是不一樣的。結(jié)果是差了8個(gè)小時(shí)。導(dǎo)致這個(gè)的原因就是時(shí)區(qū)的問題。
看下倆個(gè)函數(shù)的作用:
time.Parse
把時(shí)間字符串轉(zhuǎn)換為Time,時(shí)區(qū)是UTC時(shí)區(qū)。time.ParseInLocation
可以根據(jù)時(shí)間字符串和指定時(shí)區(qū)轉(zhuǎn)換Time。
所以,我們應(yīng)該用time.ParseInLocation
進(jìn)行轉(zhuǎn)換,同時(shí)指定時(shí)區(qū)為本地時(shí)間。
時(shí)區(qū)
這里順便在回憶下時(shí)區(qū)的關(guān)系。
整個(gè)地球分為二十四時(shí)區(qū),每個(gè)時(shí)區(qū)都有自己的本地時(shí)間。在國(guó)際無線電通信場(chǎng)合,為了統(tǒng)一起見,使用一個(gè)統(tǒng)一的時(shí)間,稱為通用協(xié)調(diào)時(shí)(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(shí)(GMT, Greenwich Mean Time)一樣,都與英國(guó)倫敦的本地時(shí)相同。在本文中,UTC與GMT含義完全相同。
北京時(shí)區(qū)(CST)是東八區(qū),領(lǐng)先UTC八個(gè)小時(shí)
關(guān)系:
UTC=GMT
CST=UTC/GMT +8 小時(shí)
時(shí)間字符串和時(shí)間戳的相互轉(zhuǎn)換
package main import ( "log" "time" ) func main() { t := int64(1546926630) //外部傳入的時(shí)間戳(秒為單位),必須為int64類型 t1 := "2019-01-08 13:50:30" //外部傳入的時(shí)間字符串 //時(shí)間轉(zhuǎn)換的模板,golang里面只能是 "2006-01-02 15:04:05" (go的誕生時(shí)間) timeTemplate1 := "2006-01-02 15:04:05" //常規(guī)類型 timeTemplate2 := "2006/01/02 15:04:05" //其他類型 timeTemplate3 := "2006-01-02" //其他類型 timeTemplate4 := "15:04:05" //其他類型 // ======= 將時(shí)間戳格式化為日期字符串 ======= log.Println(time.Unix(t, 0).Format(timeTemplate1)) //輸出:2019-01-08 13:50:30 log.Println(time.Unix(t, 0).Format(timeTemplate2)) //輸出:2019/01/08 13:50:30 log.Println(time.Unix(t, 0).Format(timeTemplate3)) //輸出:2019-01-08 log.Println(time.Unix(t, 0).Format(timeTemplate4)) //輸出:13:50:30 // ======= 將時(shí)間字符串轉(zhuǎn)換為時(shí)間戳 ======= stamp, _ := time.ParseInLocation(timeTemplate1, t1, time.Local) //使用parseInLocation將字符串格式化返回本地時(shí)區(qū)時(shí)間 log.Println(stamp.Unix()) //輸出:1546926630 }
到此這篇關(guān)于golang字符串轉(zhuǎn)Time類型問題 的文章就介紹到這了,更多相關(guān)golang字符串轉(zhuǎn)Time類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用golang實(shí)現(xiàn)traceroute
這篇文章主要介紹了如何使用golang實(shí)現(xiàn)traceroute,該工具在linux環(huán)境下的命令是traceroute或者tracepath,在windows下命令是tracert,本文給大家詳細(xì)講解需要的朋友可以參考下2023-04-04GO的基礎(chǔ)知識(shí)掃盲注意事項(xiàng)
這篇文章主要介紹了GO的基礎(chǔ)知識(shí)注意事項(xiàng),本文是GO語(yǔ)言小白的掃盲文,主要講解了go語(yǔ)言的基本知識(shí),GO程序目錄結(jié)構(gòu),GO程序包的導(dǎo)入與別名運(yùn)用,GO內(nèi)置關(guān)鍵字,GO注釋方法需要的朋友可以參考下2022-12-12詳解Go程序添加遠(yuǎn)程調(diào)用tcpdump功能
這篇文章主要介紹了go程序添加遠(yuǎn)程調(diào)用tcpdump功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Goland激活碼破解永久版及安裝詳細(xì)教程(親測(cè)可以)
這篇文章主要介紹了Goland激活碼破解永久版及安裝詳細(xì)教程(親測(cè)可以),本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10go?原子操作的方式及實(shí)現(xiàn)原理全面深入解析
這篇文章主要為大家介紹了go?原子操作的方式及實(shí)現(xiàn)原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms)
這篇文章主要介紹了golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms),本文給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11