這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Golang中time.Parse和time.Format的時區問題
發表於 2017-12-03 |
分類於 coding
一、問題描述
在windows
下,time.Parse()
的時區和time.Format()
的時區是一致的。
但是在linux
環境下,time.Parse()
的預設時區是UTC
,time.Format()
的時區預設是本地,兩者如果不處理好就會導致錯誤。
1 2 3 4 5 6 7 8 9 10 11 12 13
|
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()) }
|
輸出:
1 2 3
|
2017-12-03 22:01:02 +0000 UTC 2017-12-03 22:15:26.592204446 +0800 CST m=+0.003020091 -27935.407549533
|
很明顯能看到兩者的時區不同並且如果把兩者時間相減結果也不符合預期。
二、解決方案
使用time.ParseInLocation()
而不是time.Parse()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
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()) }
|
結果:
1 2 3
|
2017-12-03 22:01:02 +0800 CST 2017-12-03 22:18:26.288174547 +0800 CST m=+0.001532618 1044.288357362
|
golang
Redis小案例(二):redis實現訊息佇列 Redis學習筆記:訂閱和發布
馬謙馬謙馬謙
路漫漫其修遠兮
291 日誌 15 分類 53 標籤
Links
- 一、問題描述
- 二、解決方案