time 時間包

2006-01-02 15:04:05-0700是一串go獨特神奇的對應順序。可以看time/format.go

  • 2006-01-02 15:04:05-0700是一串go獨特神奇的對應順序。

時間的轉換

  • case1:時間戳轉換成時間

  • case2:將時間做格式化輸出 layout1 := "2006-01-02T15:04:05" t.Format(layout1)

  • case3:時區轉換: FixedZone(name,位移的秒數),可以自訂時區命名信息,loc := time.FixedZone(“UTC-8”, -8 * 60 * 60)第二個參數轉移多少秒,可以改+8時區等等

  • case4:時區轉換:

    • LoadLocation(name),可以輸入空值,”UTC”,”Local”,或是時區的資料庫 EX: “Asia/Taipei”,命名使用的資料庫為IANA Time Zone database

    • 好處是不用自己輸入到底是+8還加多久,知道時區命名就好,但是背後的定義還是會依下列順序去找尋對應資料:

      • ZONEINFO 環境變數所指定的zip文件

      • Unix系统中已经安装的

      • $GOROOT/lib/time/zoneinfo.zip

    因此如果在windows系统上,没有安装go語言環境,time.LoadLocation會失敗,建議用time.FixedZone。

    另外在docker環境裡也要注意使用的image是否已經有包含這些資料,否則會出現unknown time zone XXXX的錯誤,解決方法需要加入以下設定

    FROM alpine
    ...
    COPY --from=0 /usr/local/go/lib/time/zoneinfo.zip /opt/zoneinfo.zip
    ENV ZONEINFO /opt/zoneinfo.zip
    OR
    RUN apk --no-cache add tzdata
    ...
  • 範例程式:

後記:

为了方便,Go1.17 增加加了 Time.UnixMilli 方法,返回 Unix 时间戳的毫秒数

Last updated