一 、time包

时间和日期是我们编程中经常会用到的,在golang中time包提供了时间的显示和测量用的函数。

二 、time.Now获取当前时间

  1. timeObj := time.Now()
  2. year := timeObj.Year()
  3. month := timeObj.Month()
  4. day := timeObj.Day()
  5. fmt.Printf("%d-%02d-%02d \n", year, month, day)

三 、格式化日期

时间类型有一个自带的方法 Format进行格式化
2006/01/02 15:04:05 这个字符串是Go语言规定的, 各个数字都是固定的(记忆口诀:2006 1 2 3 4 5)

  1. /**
  2. 时间类型有一个自带的方法 Format进行格式化
  3. 需要注意的是Go语言中格式化时间模板不是长久的 Y-m-d H:M:S
  4. 而是使用Go的诞生时间 2006年1月2日 15点04分 (记忆口诀:2006 1 2 3 4 5)
  5. */
  6. timeObj2 := time.Now()
  7. // 24小时值 (15表示二十四小时)
  8. fmt.Println(timeObj2.Format("2006-01-02 15:04:05"))
  9. // 12小时制
  10. fmt.Println(timeObj2.Format("2006-01-02 03:04:05"))

四 、获取当前时间戳

时间戳是自1070年1月1日(0800GMT)至当前时间的总毫秒数。它也被称为Unix时间戳

  1. //获取时间戳
  2. // go语言中的时间戳是从1970年1月1日开始计算的
  3. //Unix: 返回当前时间距离1970年1月1日有多少秒
  4. //UnixNano: 返回当前时间距离1970年1月1日有多少纳秒
  5. //获取当前的时间戳
  6. fmt.Println(time.Now().Unix()) //以秒的方式表示
  7. fmt.Println(time.Now().UnixNano()) //以纳秒的方式表示

五 、时间戳转日期字符串

通过将时间戳我们可以转换成日期字符串

  1. // 时间戳转换年月日时分秒(一个参数是秒,另一个参数是毫秒)
  2. var timeObj4 = time.Unix(1595289901, 0)
  3. var timeStr = timeObj4.Format("2006-01-02 15:04:05")
  4. fmt.Println(timeStr)

六 、日期字符串转换成时间戳

  1. // 日期字符串转换成时间戳
  2. var timeStr2 = "2020-07-21 08:10:05";
  3. var tmp = "2006-01-02 15:04:05"
  4. timeObj5, _ := time.ParseInLocation(tmp, timeStr2, time.Local)
  5. fmt.Println(timeObj5.Unix())

七 、时间间隔

time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最大长度段大约290年。
time包中定义的时间间隔类型的常量如下:
Go中的日期函数 - 图1

八 、时间操作函数

我们在日常的编码过程中可能会遇到要求时间+时间间隔的需求,Go语言的时间对象有提供Add方法如下

  1. func (t Time) Add(d Duration)Time

例如

  1. // 时间相加
  2. now := time.Now()
  3. // 当前时间加1个小时后
  4. later := now.Add(time.Hour)
  5. fmt.Println(later)

同理的方法还有:时间差、判断相等

九 、定时器

方式1:使用time.NewTicker(时间间隔)来设置定时器

  1. // 定时器, 定义一个1秒间隔的定时器
  2. ticker := time.NewTicker(time.Second)
  3. n := 0
  4. for i := range ticker.C {
  5. fmt.Println(i)
  6. n++
  7. if n>5 {
  8. // 终止定时器
  9. ticker.Stop()
  10. return
  11. }
  12. }

方式2:time.Sleep(time.Second)来实现定时器

  1. for {
  2. time.Sleep(time.Second)
  3. fmt.Println("一秒后")
  4. }