time 的時區

Golang 裡面取現在時間

	now := time.Now()
	println("now", now.String())

這樣會得到now 2016-08-09 19:21:24.0960724 +0800 CST ,這代表 golang 的 time 裡面有包含 timezone 的資訊了

時區轉換

如果想把現在的時區轉換到不同的時區,同時時間要改變,例如:我想把現在 UTC + 8 (台北時間)改成 UTC-4 (美東時間)

package main

import "time"

func main() {
	now := time.Now()
	println("now", now.String())

	zone := time.FixedZone("", -4*60*60)
	newTime := now.In(zone)
	println("newTime", newTime.String())
}

結果為分別為

now 2016-08-08 21:00:49.0930566 +0800 CST
newTime 2016-08-08 09:00:49.0930566 -0400 -0400

主要是使用 FixedZone 這個 function 來達成,第一個參數是 zone 的名稱,第二個參數轉移多少秒 ( 可負數)

Day light saving

因為美國有日光節約時間,當我們要取美東時間,在夏季的時候有可能是會是少一個小時,這時候我們就要用取 timezone 的方式了,但不知道為什麼 America/New_York 在 centos7 下運作不正常,所以改用 America/Nipigon

	newYorkZone, _ := time.LoadLocation("America/Nipigon")
	newTime := time.Now().UTC().In(newYorkZone)
	println(newTime.String())