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

1.时间类型

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

  1. now := time.Now()
  2. fmt.Println(now)
  3. year :=now.Year()
  4. month := now.Month()
  5. day := now.Day()
  6. hour := now.Hour()
  7. minute := now.Minute()
  8. second := now.Second()
  9. fmt.Printf("%d-%02d-%02d %2d:%2d:%2d\n",year,month,day,hour,minute,second)

2.时间戳

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

  1. now := time.Now() //当前时间
  2. timestamp1 := now.Unix() //时间戳
  3. timestamp2 := now.UnixNano() //纳秒时间戳
  4. fmt.Println(timestamp1)
  5. fmt.Println(timestamp2)

3.时间间隔

time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。
time.Duration表示1纳秒,time.Second表示1秒。

4.时间操作

4.1Add

时间+时间间隔的需求

  1. now := time.Now()
  2. add := now.Add(time.Hour)
  3. fmt.Println(add)

4.2Sub

求两个时间之间的差值

  1. now := time.Now()
  2. add := now.Add(time.Hour)
  3. sub1 := add.Sub(now)
  4. sub2 := now.Sub(add)
  5. fmt.Println(sub1) //1h0m0s
  6. fmt.Println(sub2) //-1h0m0s

4.3Equal

判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较

  1. now := time.Now()
  2. add := now.Add(time.Hour)
  3. equal := now.Equal(add)
  4. fmt.Println(equal)

4.4Before

  1. now := time.Now()
  2. add := now.Add(time.Hour)
  3. before := now.Before(add) //true
  4. fmt.Println(before)

4.5after

  1. now := time.Now()
  2. add := now.Add(time.Hour)
  3. after := now.After(add)
  4. fmt.Println(after)

5.定时器

time.Tick(时间间隔)来设置定时器

  1. ticker := time.Tick(time.Second)
  2. for t := range ticker {
  3. fmt.Println(t)
  4. }

6.时间格式化

时间类型有一个自带的方法Format进行格式化,
需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S
而是使用Go的诞生时间2006年1月2号15点04分

  1. now := time.Now()
  2. format1 := now.Format("2006-01-02 15:04:05")
  3. format2 := now.Format("2006-01-02 03:04:05 PM")
  4. format3 := now.Format("2006/01/02 15:04:05")
  5. format4 := now.Format("2006/01/02")
  6. format5 := now.Format("15:04 2006/01/02")
  7. fmt.Println(format1)
  8. fmt.Println(format2)
  9. fmt.Println(format3)
  10. fmt.Println(format4)
  11. fmt.Println(format5)
  12. 2021-10-28 13:42:45
  13. 2021-10-28 01:42:45 PM
  14. 2021/10/28 13:42:45
  15. 2021/10/28
  16. 13:42 2021/10/28

7.解析字符串格式

  1. now := time.Now()
  2. fmt.Println(now)
  3. //加载时区
  4. location, err := time.LoadLocation("Asia/Shanghai")
  5. if err != nil {
  6. fmt.Println(err)
  7. return
  8. }
  9. //按照指定时区和指定格式解析字符串时间
  10. inLocation, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/01/01 15:15:15", location)
  11. if err != nil {
  12. fmt.Println(err)
  13. return
  14. }
  15. fmt.Println(inLocation)
  16. fmt.Println(inLocation.Sub(now))