教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言时间类型和时间戳

go语言时间类型和时间戳

发布时间:2023-01-11   编辑:jiaochengji.com
教程集为您提供go语言时间类型和时间戳等资源,欢迎您收藏本站,我们将为您提供最新的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
2018112112: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即可。
将上面的两个时间变量timestamptimestamp1转为时间戳

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

[关闭]
~ ~