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) //1h0m0sfmt.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) //truefmt.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:452021-10-28 01:42:45 PM2021/10/28 13:42:452021/10/2813: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))
