Golang time.Parse和time.Format的時區問題

原文鏈接:Golang time.Parse和time.Format的時區問題

一、問題描述

windows下,time.Parse()的時區和time.Format()的時區是一致的。

但是在linux環境下,time.Parse()的默認時區是UTC,time.Format()的時區默認是本地,兩者如果不處理好就會導致錯誤。

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

很明顯能看到兩者的時區不同并且如果把兩者時間相減結果也不符合預期。

二、解決方法

使用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())
}

結果:

2017-12-03 22:01:02 +0800 CST
2017-12-03 22:18:26.288174547 +0800 CST m=+0.001532618
1044.288357362
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概念解釋 時區(Timezone) 為什么會將地球分為不同時區呢?因為地球總是自西向東自轉,東邊總比西邊先看到太陽...
    黑炭媽閱讀 6,873評論 0 5
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • SwiftDate概況 從Swift發布起,我們就沒有放棄使用Swift。 當然,我們希望在項目能夠輕松自如地管理...
    Mee_Leo閱讀 10,182評論 1 13
  • 這邊雒寶安受人接待,那邊雒玉山招呼著被邀請來的好友瞿先生,幾案上擺著茶杯茶壺,他特地沏了午子仙毫。瞿先生年已古稀,...
    趙建銅閱讀 505評論 0 3
  • 雨天午后 靜坐窗下 一杯茶 品人生沉浮 一首歌 觸及心底 一本好的書,意外邂逅 目光所及之處都是驚喜 在這里讓你深...
    雨霖磐石閱讀 326評論 5 6