time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。
1.时间类型
time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象
获取时间对象的年月日时分秒等信息。
now := time.Now()
fmt.Println(now)
year :=now.Year()
month := now.Month()
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
fmt.Printf("%d-%02d-%02d %2d:%2d:%2d\n",year,month,day,hour,minute,second)
2.时间戳
使用time.Unix()函数可以将时间戳转为时间格式。
now := time.Now() //当前时间
timestamp1 := now.Unix() //时间戳
timestamp2 := now.UnixNano() //纳秒时间戳
fmt.Println(timestamp1)
fmt.Println(timestamp2)
3.时间间隔
time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。
time.Duration表示1纳秒,time.Second表示1秒。
4.时间操作
4.1Add
时间+时间间隔的需求
now := time.Now()
add := now.Add(time.Hour)
fmt.Println(add)
4.2Sub
求两个时间之间的差值
now := time.Now()
add := now.Add(time.Hour)
sub1 := add.Sub(now)
sub2 := now.Sub(add)
fmt.Println(sub1) //1h0m0s
fmt.Println(sub2) //-1h0m0s
4.3Equal
判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较
now := time.Now()
add := now.Add(time.Hour)
equal := now.Equal(add)
fmt.Println(equal)
4.4Before
now := time.Now()
add := now.Add(time.Hour)
before := now.Before(add) //true
fmt.Println(before)
4.5after
now := time.Now()
add := now.Add(time.Hour)
after := now.After(add)
fmt.Println(after)
5.定时器
time.Tick(时间间隔)来设置定时器
ticker := time.Tick(time.Second)
for t := range ticker {
fmt.Println(t)
}
6.时间格式化
时间类型有一个自带的方法Format进行格式化,
需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S
而是使用Go的诞生时间2006年1月2号15点04分
now := time.Now()
format1 := now.Format("2006-01-02 15:04:05")
format2 := now.Format("2006-01-02 03:04:05 PM")
format3 := now.Format("2006/01/02 15:04:05")
format4 := now.Format("2006/01/02")
format5 := now.Format("15:04 2006/01/02")
fmt.Println(format1)
fmt.Println(format2)
fmt.Println(format3)
fmt.Println(format4)
fmt.Println(format5)
2021-10-28 13:42:45
2021-10-28 01:42:45 PM
2021/10/28 13:42:45
2021/10/28
13:42 2021/10/28
7.解析字符串格式
now := time.Now()
fmt.Println(now)
//加载时区
location, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println(err)
return
}
//按照指定时区和指定格式解析字符串时间
inLocation, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/01/01 15:15:15", location)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(inLocation)
fmt.Println(inLocation.Sub(now))