Go时区设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go时区设置相关的知识,希望对你有一定的参考价值。

参考技术A 全球以英国伦敦格林威治作为零度经线的起点,每隔15经度为一个时区,15度经线为该时区的中央经线,共分为24个时区。由西向东每隔15经度增加一个时区,相反的,每向西15经度减少一个时区。中国所在时区为东8区。

当前时间 time.Now() 返回的是当地时区的时间:

CST可以代表如下四个不同的时区:

time.Now() 返回的 +0800 CST 表示的就是中国标准时间,与UTC时间有如下的转化:

Wall Clocks表示挂钟时间,存储的是自1970 年 1 月 1 日 0 时 0 分 0 秒以来的时间戳,当系统和授时服务器进行校准时间时间操作时,有可能造成这一秒是2018-1-1 00:00:00,而下一秒变成了2017-12-31 23:59:59的情况。
Monotonic Clocks,意思是单调时间的,所谓单调,就是只会不停的往前增长,不受校时操作的影响,这个时间是自进程启动以来的秒数。
time.Now() 返回的 m=+0.004002201 就是表示Monotonic Clocks

go语言中如果不设置指定的时区,通过 time.Now() 获取到的就是本地时区

设置时区有两种方式:

固定时区到东八区。但这种不是对程序的全局设置,每次获取时都需要固定时区

加载指定时区。但如果没有go环境使用这种方式就会加载失败,因为时区信息是放在go的安装包中的。

如果你用第二种方式加载时区,在打docker镜像时就需要进行时区相关的配置,配置文件如下:

参考文章:
https://zhuanlan.zhihu.com/p/47754783
https://blog.mimvp.com/article/11887.html

GO语言系列

今天来看看一些关于时间操作的基本示例代码,一个个来吧。


1. 如何获取当前时区和其他时区的当前时间?

package main

import (

    "fmt"

    "time"

)

  

func main() {

    t := time.Now()

    fmt.Println("Location : ", t.Location(), " Time : ", t) // local time

      

    location, err := time.LoadLocation("America/New_York")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println("Location : ", location, " Time : ", t.In(location)) // America/New_York

  

    loc, _ := time.LoadLocation("Asia/Shanghai")

    now := time.Now().In(loc)

    fmt.Println("Location : ", loc, " Time : ", now) // Asia/Shanghai

}


运行结果:

C:golang ime>go run t1.go
Location : Local Time : 2017-08-26 21:04:56.1874497 +0530 IST
Location : America/New_York Time : 2017-08-26 11:34:56.1874497 -0400 EDT
Location : Asia/Shanghai Time : 2017-08-26 23:34:56.1884498 +0800 CST

C:golang ime>


2. 使用Weekday和YearDay方法的示例:

package main 

import (

    "fmt"

    "time"

)

  

func main() {

    t,_ := time.Parse("2006 01 02 15 04", "2015 11 11 16 50")  

    fmt.Println(t.YearDay())    // 315

    fmt.Println(t.Weekday())    // Wednesday

      

    t,_ = time.Parse("2006 01 02 15 04", "2011 01 01 0 00")

    fmt.Println(t.YearDay())

    fmt.Println(t.Weekday())

}


输出结果:

C:golang ime>go run t7.go
315
Wednesday
1
Saturday

3. 获取当前时间对应的年、月、日的代码:

package main

  

 import (

         "fmt"

         "time"    

 )

  

 func main() {      

    currentTime := time.Now()       

    fmt.Println(" ###################################### ")

    fmt.Println(currentTime.Format("2006-01-02 15:04:05"))

      

    fmt.Println(" ###################################### ")  

    timeStampString := currentTime.Format("2006-01-02 15:04:05")   

    layOut := "2006-01-02 15:04:05"    

    timeStamp, err := time.Parse(layOut, timeStampString)

    if err != nil {

        fmt.Println(err)         

    }  

    hr, min, sec := timeStamp.Clock()

      

    fmt.Println("Year   :", currentTime.Year())

    fmt.Println("Month  :", currentTime.Month())

    fmt.Println("Day    :", currentTime.Day())

    fmt.Println("Hour   :", hr)

    fmt.Println("Min    :", min)

    fmt.Println("Sec    :", sec)   

      

    fmt.Println(" ###################################### ")  

    year, month, day := time.Now().Date()

    fmt.Println("Year   :", year)

    fmt.Println("Month  :", month)

    fmt.Println("Day    :", day)

      

    fmt.Println(" ###################################### ")         

    t := time.Now()

      

    y := t.Year()

    mon := t.Month()

    d := t.Day()

    h := t.Hour()

    m := t.Minute()

    s := t.Second()

    n := t.Nanosecond()

      

    fmt.Println("Year   :",y)

    fmt.Println("Month   :",mon)

    fmt.Println("Day   :",d)

    fmt.Println("Hour   :",h)

    fmt.Println("Minute :",m)

    fmt.Println("Second :",s)

    fmt.Println("Nanosec:",n)

}


输出结果:

C:golang ime>go run t7.go######################################2017-08-27 18:11:54######################################Year : 2017Month : AugustDay : 27Hour : 18Min : 11Sec : 54######################################Year : 2017Month : AugustDay : 27######################################Year : 2017Month : AugustDay : 27Hour : 18Minute : 11Second : 54Nanosec: 319513100

4. UTC时间转变为其他时区时间:

package main

import (

    "fmt"

    "time"

)

  

func main() {

    t, err := time.Parse("2006 01 02 15 04", "2015 11 11 16 50")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(t)

  

    loc, err := time.LoadLocation("America/Los_Angeles")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(loc)

      

    t = t.In(loc)

    fmt.Println(t.Format(time.RFC822))

      

    loc, err = time.LoadLocation("Singapore")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(loc)

  

    t = t.In(loc)

    fmt.Println(t.Format(time.RFC822))

      

    loc, err = time.LoadLocation("US/Hawaii")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(loc)

  

    t = t.In(loc)

    fmt.Println(t.Format(time.RFC822))

      

    loc, err = time.LoadLocation("EST")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(loc)

      

    t = t.In(loc)

    fmt.Println(t.Format(time.RFC822))

      

    loc, err = time.LoadLocation("MST")

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(loc)

      

    t = t.In(loc)

    fmt.Println(t.Format(time.RFC822))

      

}


输出结果:

C:golang ime>go run t7.go2015-11-11 16:50:00 +0000 UTCAmerica/Los_Angeles11 Nov 15 08:50 PSTSingapore12 Nov 15 00:50 SGTUS/Hawaii11 Nov 15 06:50 HSTEST11 Nov 15 11:50 ESTMST11 Nov 15 09:50 MST

发个小广告!!!走过路过,不要错过!新书来啦!!!

GO语言系列(四)
GO语言系列(四)
GO语言系列(四)

这里有你想买的书!

http://product.dangdang.com/23949549.html#ddclick_reco_reco_relate

麦克叔叔每晚十点说


以上是关于Go时区设置的主要内容,如果未能解决你的问题,请参考以下文章

Go 中对time包时间和时区处理

Go 中对time包时间和时区处理

Go语言中时间函数及定时器的使用

用golang的mgo驱动,mongodb时区怎么设置,总是慢8小时

解决XORM的时区问题

cmd设置时区