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
这里的转换可以选择是转换为当地时间还是伦敦时间。