您好,登錄后才能下訂單哦!
這篇文章主要介紹“golang字符串轉Time類型問題怎么解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“golang字符串轉Time類型問題怎么解決”文章能幫助大家解決問題。
最近在做項目中,遇到了golang 字符串轉Time類型的問題。調研后發現golang 提供了倆種方式,即time.Parse 跟 time.ParseInLocation。倆種方式 差距很大,用不好小心踩坑。
先上代碼:
結果:
不難發現,倆種方式轉換后的時間戳是不一樣的。結果是差了8個小時。導致這個的原因就是時區的問題。
看下倆個函數的作用:
time.Parse
把時間字符串轉換為Time,時區是UTC時區。
time.ParseInLocation
可以根據時間字符串和指定時區轉換Time。
所以,我們應該用time.ParseInLocation
進行轉換,同時指定時區為本地時間。
這里順便在回憶下時區的關系。
整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時相同。在本文中,UTC與GMT含義完全相同。
北京時區(CST)是東八區,領先UTC八個小時
關系:
UTC=GMT
CST=UTC/GMT +8 小時
package main import ( "log" "time" ) func main() { t := int64(1546926630) //外部傳入的時間戳(秒為單位),必須為int64類型 t1 := "2019-01-08 13:50:30" //外部傳入的時間字符串 //時間轉換的模板,golang里面只能是 "2006-01-02 15:04:05" (go的誕生時間) timeTemplate1 := "2006-01-02 15:04:05" //常規類型 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 // ======= 將時間字符串轉換為時間戳 ======= stamp, _ := time.ParseInLocation(timeTemplate1, t1, time.Local) //使用parseInLocation將字符串格式化返回本地時區時間 log.Println(stamp.Unix()) //輸出:1546926630 }
關于“golang字符串轉Time類型問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。