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
发个小广告!!!走过路过,不要错过!新书来啦!!!
这里有你想买的书!
http://product.dangdang.com/23949549.html#ddclick_reco_reco_relate
麦克叔叔每晚十点说
以上是关于Go时区设置的主要内容,如果未能解决你的问题,请参考以下文章