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)換后的時間戳是不一樣的。結(jié)果是差了8個小時。導(dǎo)致這個的原因就是時區(qū)的問題。
看下倆個函數(shù)的作用:
time.Parse把時間字符串轉(zhuǎn)換為Time,時區(qū)是UTC時區(qū)。time.ParseInLocation可以根據(jù)時間字符串和指定時區(qū)轉(zhuǎn)換Time。
所以,我們應(yīng)該用time.ParseInLocation進(jìn)行轉(zhuǎn)換,同時指定時區(qū)為本地時間。
時區(qū)
這里順便在回憶下時區(qū)的關(guān)系。
整個地球分為二十四時區(qū),每個時區(qū)都有自己的本地時間。在國際無線電通信場合,為了統(tǒng)一起見,使用一個統(tǒng)一的時間,稱為通用協(xié)調(diào)時(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時相同。在本文中,UTC與GMT含義完全相同。
北京時區(qū)(CST)是東八區(qū),領(lǐng)先UTC八個小時
關(guān)系:
UTC=GMT
CST=UTC/GMT +8 小時
時間字符串和時間戳的相互轉(zhuǎn)換
package main
import (
"log"
"time"
)
func main() {
t := int64(1546926630) //外部傳入的時間戳(秒為單位),必須為int64類型
t1 := "2019-01-08 13:50:30" //外部傳入的時間字符串
//時間轉(zhuǎn)換的模板,golang里面只能是 "2006-01-02 15:04:05" (go的誕生時間)
timeTemplate1 := "2006-01-02 15:04:05" //常規(guī)類型
timeTemplate2 := "2006/01/02 15:04:05" //其他類型
timeTemplate3 := "2006-01-02" //其他類型
timeTemplate4 := "15:04:05" //其他類型
// ======= 將時間戳格式化為日期字符串 =======
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
// ======= 將時間字符串轉(zhuǎn)換為時間戳 =======
stamp, _ := time.ParseInLocation(timeTemplate1, t1, time.Local) //使用parseInLocation將字符串格式化返回本地時區(qū)時間
log.Println(stamp.Unix()) //輸出:1546926630
}
到此這篇關(guān)于golang字符串轉(zhuǎn)Time類型問題 的文章就介紹到這了,更多相關(guān)golang字符串轉(zhuǎn)Time類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言實(shí)現(xiàn)超時的三種方法實(shí)例
超時在一些業(yè)務(wù)場景里非常普遍,下面這篇文章主要給大家介紹了關(guān)于Go語言實(shí)現(xiàn)超時的三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Go語言具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-07-07
Golang使用minio替代文件系統(tǒng)的實(shí)戰(zhàn)教程
本文討論項(xiàng)目開發(fā)中直接文件系統(tǒng)的限制或不足,接著介紹Minio對象存儲的優(yōu)勢,同時給出Golang的實(shí)際示例代碼,包括初始化客戶端、讀取minio對象以及設(shè)置過期策略等,需要的朋友可以參考下2025-01-01
golang中的select關(guān)鍵字用法總結(jié)
這篇文章主要介紹了golang中的select關(guān)鍵字用法總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
golang之?dāng)?shù)據(jù)驗(yàn)證validator的實(shí)現(xiàn)
這篇文章主要介紹了golang之?dāng)?shù)據(jù)驗(yàn)證validator的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
golang用melody搭建輕量的websocket服務(wù)的示例代碼
在Go中,可以使用gin和melody庫來搭建一個輕量級的WebSocket服務(wù),gin是一個流行的Web框架,而melody是一個用于處理WebSocket的庫,本文給大家演示如何使用gin和melody搭建WebSocket服務(wù),感興趣的朋友一起看看吧2023-10-10
關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng)總結(jié)(強(qiáng)烈推薦!)
map是一種無序的基于key-value的數(shù)據(jù)結(jié)構(gòu),Go語言中的map是引用類型,必須初始化才能使用,下面這篇文章主要給大家介紹了關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng),需要的朋友可以參考下2023-01-01
協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請求攜帶登錄信息
這篇文章主要為大家介紹了協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請求攜帶登錄信息2022-06-06

