Fork me on GitHub

Golang之旅21-time模块使用

time包

time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

时间类型

time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年、月、日、时、分、秒等信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
"fmt"
"time"
)

// time包:时间的测量和显示

func main(){
// Now()首字母大写才能外部访问;
now := time.Now() // 输出当前时间,得到时间对象实例
year := now.Year()
month := now.Month()
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
fmt.Println(year, month, day, hour, minute, second)
}

时间戳

时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)

使用time.Unix()函数可以将时间戳转为时间格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"time"
)

// time包:时间的测量和显示

func main(){
// 时间戳:1970年1月1日到现在经过的时间,用秒数表示
timeStamp1 := now.Unix()
timeStamp2 := now.UnixNano() // 得到纳秒形式
fmt.Println(timeStamp1, timeStamp2)

// 将时间戳转成具体时间格式
t := time.Unix(1470997973, 0) // 传入参数是时间戳
fmt.Println(t)
}

时间间隔

time.Durationtime包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位

time包中定义的时间间隔类型的常量如下:

1
2
3
4
5
6
7
8
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"fmt"
"time"
)

// time包:时间的测量和显示

func main(){
// 时间间隔:单位纳秒
//time.Duration(),强制转成时间间隔形式
//time.Sleep(5*time.Second) 同下两句
n := 5
time.Sleep(time.Duration(n) * time.Second) // time.Duration(n) 将整型转成时间间隔的形式
fmt.Println("over")
}

几个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"time"
)

// 几个函数
func main(){

// add
fmt.Println(now)
// 传入的时间间隔类型time.Hour
t2 := now.Add(time.Hour) // 加上1个小时
fmt.Println(t2)
// sub:t2 - now
fmt.Println(t2.Sub(now))
// equal before after
}

定时器

使用time.Tick来设置定时器,本质上返回的是一个通道(channel)。

1
2
3
4
5
6
func timeTick(){
ticker := time.Tick(time.Second * 2) // 间隔2秒钟
for i := range ticker{ // 返回值是通道
fmt.Println(i)
}
}

时间格式化与解析

时间类型自带的方法Format进行格式化,格式化采用的是Go语言诞生的时间:2006年1月2号15点04分(记忆:2006 1234)

如果想格式为12小时制需要指定PM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package main

import (
"fmt"
"time"
)

// 时间格式化和解析

func main(){

// 待解析字符串格式的时间
timeStr := "2019/10/17 08:09:36"

// 1. 拿到时区
loc, err := time.LoadLocation("Asia/Shanghai") // 获取当前时区
if err != nil{
fmt.Println(err)
return
}

// 2. 根据时区去解析得到的一个字符串格式化的时间
timeObj, err := time.Parse("2016/01/02 15:04:05", timeStr)
if err != nil{
fmt.Printf("parse timeStr failed, err:%v\n", err)
return
}
fmt.Println(timeObj)

// 解析到具体的某个时区:loc当地时区
timeObj2, err := time.ParseInLocation("2016/01/02 15:45:05", timeStr, loc)
if err != nil{
fmt.Printf("parse timeStr failed, err:%v\n", err)
return
}
fmt.Println(timeObj2)

// 按照指定时区和指定格式解析字符串时间
timeObj3, err := time.ParseInLocation("2006/01/02 15:04:05", "2019/10/04 14:15:20", loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(timeObj3)
}

本文标题:Golang之旅21-time模块使用

发布时间:2019年10月16日 - 23:10

原始链接:http://www.renpeter.cn/2019/10/16/Golang%E4%B9%8B%E6%97%8521-time%E6%A8%A1%E5%9D%97%E4%BD%BF%E7%94%A8.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea