Golang 中如何进行时区转换与设置

发表时间: 2024-04-30 15:09

如何转换时区?

package mainimport ("fmt""time")func main() {    // Local    // golang 默认采用当地(本地)时区时间    fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 2022-03-23 11:02:48    // 等同于    fmt.Println(time.Now().Local().Format("2006-01-02 15:04:05")) // 2022-03-23 11:02:48    // Local 本地时区 查看方式: cat /etc/timezone    fmt.Println(time.Local)    // UTC    // 统一强制使用UTC时间, 使用 UTC 世界通用时间(相当于0时区)    fmt.Println(time.Now().UTC().Format("2006-01-02 15:04:05")) // 2022-03-23 03:02:48    fmt.Println(time.Now().UTC().Unix()) // 1648004568    // 如何设置时区(东八区)    var zone, _ = time.LoadLocation("Asia/Shanghai")    fmt.Println("SH: ", time.Now().In(zone).Format("2006-01-02 15:04:05")) // SH: 2022-03-23 11:02:48}

Linux如何查看时区?

> # cat /etc/timezone

Asia/Shanghai

或者 使用 timedatectl 命令

> # timedatectl

Local time: Wed 2022-03-23 10:52:11 CST

Universal time: Wed 2022-03-23 02:52:11 UTC

RTC time: Wed 2022-03-23 02:52:12

Time zone: Asia/Shanghai (CST, +0800)

System clock synchronized: yes

systemd-timesyncd.service active: yes

RTC in local TZ: no

Linux如何设置时区:

> # timedatectl set-timezone "Asia/Shanghai"

结论:

在部署PHP项目的时候, 全局设置时区的方法:

date_default_timezone_set('PRC');

Golang 并没有全局设置时区方法, 每次输出时间都需要调用一个In()函数改变时区:

// 如何设置时区var zone, _ = time.LoadLocation("Asia/Shanghai") //上海fmt.Println("SH: ", time.Now().In(zone).Format("2006-01-02 15:04:05")) // SH: 2022-03-23 10:45:40

问题:

在windows系统上, 没有安装go语言环境的情况下, time.LoadLocation 会加载失败。

解决方法:

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