go语言时间类型和时间戳
时间类型
获取当地时间
fmt.Println(time.Now())
fmt.Println(time.Now().Local())
fmt.Println(time.Now().UTC())
fmt.Println(time.Now().Location())
运行结果
2018-11-21 11:50:39.540473 0800 CST m= 0.000311562
2018-11-21 11:50:39.540628 0800 CST
2018-11-21 03:50:39.540632 0000 UTC
Local
获取时间的函数为time.now()
,这里加不加.Local()
,获取的都是当地时间。
加.UTC
得到的是0时区(也就是伦敦)的时间。func Now() Time
这个函数的返回值是Time
,也就是时间类型。
时间戳
时间戳函数的返回值都是int64
,是一个大整数。
获取时间戳
fmt.Println(time.Now().Unix())
fmt.Println(time.Now().Local().Unix())
fmt.Println(time.Now().UTC().Unix())
fmt.Println(time.Now().UnixNano())
运行结果
1542772752
1542772752
1542772752
1542772752846107000
这次,加不加.Local()
、.UTC()
结果都是一样的。
那什么是时间戳呢,时间戳就是
格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到此时此刻的【总秒数】
那么,在go语言中,time.Now().Unix()
或者time.Now().Local().Unix()
就是【北京时间1970年01月01日08时00分00秒】到【北京时间此时此刻】的总秒数。
相应的time.Now().UTC().Unix()
就是【格林威治时间1970年01月01日00时00分00秒】到【格林威治时间此时此刻】的总秒数。
因此上面得到的几个时间戳是一样的
。
时间戳是一个【总秒数
】,所以时间戳函数的返回值都是int64
。所以go语言中有时间类型,但并没有一个单独的【时间戳类型】。
将时间类型格式化,得到一个表示时间的字符串
t := time.Now()
str := t.Format("2006-01-02 15:04:05")
str1 := t.Format("2006年1月2日 15:04:05")
fmt.Println(t)
fmt.Println(str)
fmt.Println(str1)
运行结果
2018-11-21 12:48:19.870047 0800 CST m= 0.000503740
2018-11-21 12:48:19
2018年11月21日 12:48:19
第一行是time.Now()
的结果,是时间类型【Time
】
下面两行是t.Format()
的结果,是字符串。
将表示时间类型的字符串转换为时间类型Time
t := time.Now()
str := t.Format("2006-01-02 15:04:05")
str1 := t.Format("2006年1月2日 15:04:05")
timestamp, _ := time.Parse("2006-01-02 15:04:05", str)
timestamp1, _ := time.Parse("2006年1月2日 15:04:05", str1)
fmt.Println(timestamp)
fmt.Println(timestamp1)
运行结果
2018-11-21 12:48:19 0000 UTC
2018-11-21 12:48:19 0000 UTC
函数func Parse(layout, value string) (Time, error)
的第一个参数是需要转换的字符串的格式,第二个参数是需要转换的字符串。返回值是时间类型和一个err。
【注意】
在将字符串转为时间类型的时候,是直接转为了【伦敦时间】,go语言并不会去判断这个字符串表示的是北京时间,还是伦敦时间,因为没法判断,只有你知道它表示的是哪里的时间。比如16:08:05
在中国那当然表示的是北京时间,但是如果把这个字符串转为时间类型,就直接变成伦敦时间的16:08:05
了。
将时间类型转换为时间戳
直接调用方法func (t Time) Unix() int64
即可。
将上面的两个时间变量timestamp
和timestamp1
转为时间戳
fmt.Println(timestamp.Unix())
fmt.Println(timestamp1.Unix())
运行结果
1542804499
1542804499
将时间戳转换为时间类型
用函数func Unix(sec int64, nsec int64) Time
进行转换,第一个参数是秒,第二个参数是纳秒,会被加到结果的小数点后面。
tmsp := time.Now().Unix()
fmt.Println(tmsp)
t1 := time.Unix(tmsp, 0).UTC()
t2 := time.Unix(tmsp, tmsp).Local()
fmt.Println(t1)
fmt.Println(t2)
运行结果
1542779708
2018-11-21 05:55:08 0000 UTC
2018-11-21 13:55:09.542779708 0800 CST
这里的转换可以选择是转换为当地时间还是伦敦时间。
到此这篇关于“go语言时间类型和时间戳”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
golang time包使用方法详解
GO语言中的“时间”
Go 语言到底适合干什么?
go语言和python哪个难
学习php中时间戳和日期格式的转换
php时间戳应用举例
初识 Go 语言
mysql 时间戳按指定格式(Y-m-d)输出
Go语言学习3----Go语言特色
go run main.go 参数_Go语言入门:Hello world