解決Golang time.Parse和time.Format的時(shí)區(qū)問(wèn)題
一、問(wèn)題描述
在windows下,time.Parse()的時(shí)區(qū)和time.Format()的時(shí)區(qū)是一致的。
但是在linux環(huán)境下,time.Parse()的默認(rèn)時(shí)區(qū)是UTC,time.Format()的時(shí)區(qū)默認(rèn)是本地,兩者如果不處理好就會(huì)導(dǎo)致錯(cuò)誤。
package main
import "time"
import "fmt"
func main(){
t, err := time.Parse("2006-01-02 15:04:05", "2017-12-03 22:01:02")
if err != nil{
fmt.Println(err)
return
}
fmt.Println(t)
fmt.Println(time.Now())
fmt.Println(time.Now().Sub(t).Seconds())
}
輸出:
2017-12-03 22:01:02 +0000 UTC
2017-12-03 22:15:26.592204446 +0800 CST m=+0.003020091
-27935.407549533
很明顯能看到兩者的時(shí)區(qū)不同并且如果把兩者時(shí)間相減結(jié)果也不符合預(yù)期。
二、解決方法
使用time.ParseInLocation()而不是time.Parse():
package main
import "time"
import "fmt"
func main(){
localTime, err := time.ParseInLocation("2006-01-02 15:04:05", "2017-12-03 22:01:02", time.Local)
if err != nil{
fmt.Println(err)
return
}
fmt.Println(localTime)
fmt.Println(time.Now())
fmt.Println(time.Now().Sub(localTime).Seconds())
}
結(jié)果:
2017-12-03 22:01:02 +0800 CST
2017-12-03 22:18:26.288174547 +0800 CST m=+0.001532618
1044.288357362
補(bǔ)充:最自戀的golang的time.Format的坑
我想格式化輸出日期
fmt. Println (time. Now (). Format ( "2010-10-10 15:04:05" ))
結(jié)果輸出了
9060-60-60 11:11:36
這什么鬼
百度了一個(gè)
fmt. Println (time. Now (). Format ( "2006-01-02 15:04:05" ))
這就輸出正確了
2017-06-09 11:12:39
為什么呢,沒(méi)有問(wèn)題什么,因?yàn)間o語(yǔ)言最自戀,據(jù)說(shuō)那個(gè)日期是GO語(yǔ)言的誕生時(shí)間,一定要用這個(gè)日期格式化
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證
本文主要介紹了go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
goland把go項(xiàng)目打包進(jìn)docker鏡像的全過(guò)程記錄
golang編譯的應(yīng)用是不需要依賴其他運(yùn)行環(huán)境的,下面這篇文章主要給大家介紹了關(guān)于goland把go項(xiàng)目打包進(jìn)docker鏡像的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
使用Go語(yǔ)言實(shí)現(xiàn)常見(jiàn)hash算法
這篇文章主要為大家詳細(xì)介紹了使語(yǔ)言實(shí)現(xiàn)各種常見(jiàn)hash算法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下2024-01-01
Go語(yǔ)言Gin框架獲取請(qǐng)求參數(shù)的兩種方式
在添加路由處理函數(shù)之后,就可以在路由處理函數(shù)中編寫(xiě)業(yè)務(wù)處理代碼了,而編寫(xiě)業(yè)務(wù)代碼第一件事一般就是獲取HTTP請(qǐng)求的參數(shù)吧,Gin框架在net/http包的基礎(chǔ)上封裝了獲取參數(shù)的方式,本文小編給大家介紹了獲取參數(shù)的兩種方式,需要的朋友可以參考下2024-01-01
使用Go語(yǔ)言玩轉(zhuǎn) RESTful API 服務(wù)
RESTful API是一種基于HTTP協(xié)議的API設(shè)計(jì)風(fēng)格,遵循REST架構(gòu)風(fēng)格,這篇文章主要為大家介紹了如何通過(guò)Go語(yǔ)言構(gòu)建RESTful API服務(wù),有需要的可以了解下2025-02-02

