golang設置時區(qū)的方法:1、固定時區(qū)到東八區(qū),設置代碼如“var cstZone = time.FixedZone("CST", 8*3600)”;2、加載指定時區(qū),設置代碼如“var cstSh, _ = time.LoadLocation("Asia/Shanghai")”。
本教程操作環(huán)境:Windows10系統(tǒng)、GO 1.18版、Dell G3電腦。
golang怎么設置時區(qū)?
Go時區(qū)設置
時區(qū)的劃分
全球以英國倫敦格林威治作為零度經線的起點,每隔15經度為一個時區(qū),15度經線為該時區(qū)的中央經線,共分為24個時區(qū)。由西向東每隔15經度增加一個時區(qū),相反的,每向西15經度減少一個時區(qū)。中國所在時區(qū)為東8區(qū)。
時間格式
當前時間time.Now()返回的是當地時區(qū)的時間:
func main() { t := time.Now() fmt.Println(t) //2020-12-16 09:34:19.5828312 +0800 CST m=+0.004002201 }
CST時間
CST可以代表如下四個不同的時區(qū):
Central Standard Time (USA) UT-6:00:美國標準時間 Central Standard Time (Australia) UT+9:30:澳大利亞標準時間 China Standard Time UT+8:00:中國標準時間 Cuba Standard Time UT-4:00:古巴標準時間
time.Now()返回的 +0800 CST 表示的就是中國標準時間,與UTC時間有如下的轉化:
GMT + 8 = UTC + 8 = CST
Monotonic Clocks 和 Wall Clocks
Wall Clocks表示掛鐘時間,存儲的是自1970 年 1 月 1 日 0 時 0 分 0 秒以來的時間戳,當系統(tǒng)和授時服務器進行校準時間時間操作時,有可能造成這一秒是2018-1-1 00:00:00,而下一秒變成了2017-12-31 23:59:59的情況。
Monotonic Clocks,意思是單調時間的,所謂單調,就是只會不停的往前增長,不受校時操作的影響,這個時間是自進程啟動以來的秒數。
time.Now()返回的m=+0.004002201就是表示Monotonic Clocks
時區(qū)設置
go語言中如果不設置指定的時區(qū),通過time.Now()獲取到的就是本地時區(qū)
func main() { t := time.Now() //返回本地時區(qū)格式 fmt.Println(t) }
設置時區(qū)有兩種方式:
-
固定時區(qū)(推薦使用)
var cstZone = time.FixedZone("CST", 8*3600) // 東八 fmt.Println(time.Now().In(cstZone).Format("2006-01-02 15:04:05"))
固定時區(qū)到東八區(qū)。但這種不是對程序的全局設置,每次獲取時都需要固定時區(qū)
-
加載時區(qū)
var cstSh, _ = time.LoadLocation("Asia/Shanghai") // 上海 fmt.Println(time.Now().In(cstSh).Format("2006-01-02 15:04:05"))
加載指定時區(qū)。但如果沒有go環(huán)境使用這種方式就會加載失敗,因為時區(qū)信息是放在go的安裝包中的。
docker中配置時區(qū)
如果你用第二種方式加載時區(qū),在打docker鏡像時就需要進行時區(qū)相關的配置,配置文件如下:
FROM golang:alpine as build RUN apk --no-cache add tzdata //構建階段加載時區(qū) WORKDIR /app ADD . /app RUN CGO_ENABLED=0 GOOS=linux go build -o myapp FROM scratch as final COPY --from=build /app/myapp . ### 下面這行是新加的,復制時區(qū)相關的信息到最終鏡像中,否則程序會找不到改時區(qū) COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo ENV TZ=Asia/Shanghai //在最終階段設置時區(qū)環(huán)境變量 CMD ["/myapp"]
推薦學習:《go視頻教程》