转:golang 时区设置


Go语言没有一个像php那种全局设置时区的办法。

在Go语言上,go语言的time.Now()返回的是当地时区时间,直接用:

time.Now().Format("2006-01-02 15:04:05")

输出的是当地时区时间。

go语言并没有全局设置时区这么一个东西,每次输出时间都需要调用一个In()函数改变时区:

var TimeLocation, _ = time.LoadLocation("Asia/Shanghai") //上海
fmt.Println("SH : ", time.Now().In(TimeLocation).Format("2006-01-02 15:04:05"))

在windows系统上,time.LoadLocation会加载失败。最好的办法是用time.FixedZone

var TimeLocation= time.FixedZone("CST", 8*3600)       // 东八
fmt.Println("SH : ", time.Now().In(TimeLocation).Format("2006-01-02 15:04:05"))

via https://studygolang.com/articles/13018

以上内容根据测试结果有修改。

----------------华丽的分割线-------------------
经过实际测试,在windows下使用time.LoadLocation("Asia/Shanghai")会报错:
Handler crashed with error time: missing Location in call to Time.In
实际使用时可以这样:

TimeLocation,err := time.LoadLocation("Asia/shanghai")
if err != nil{
    logs.Debug(err)
    TimeLocation = time.FixedZone("CST", 8*3600)
}

这样无论程序部署在哪个地区都能显示顺眼的时间了。

Archives