携手创造,共同成长!这是我参加「日新方案 8 月更文挑战」的第27天,点击查看活动详情

一、Go 言语的 time 标准库

Go 言语的 time 标准库提供了时刻交互以及测量时刻的函数和方法。

获取当前时刻 Now

要在 Go 言语中获取当前时刻能够运用 time 包下的 Now 方法。

func main(){
   t := time.Now()
   fmt.Println(t) // 2022-08-27 12:18:47.399006 +0800 CST m=+0.000088462
}

输出的时刻中的 CST 表明时区,如果计算机中设置的时区不同,那么输出的所处的时刻也不一样,也就是说 Now 获取的时刻是来自底层操作系统的时刻。

程序暂停 Sleep

Java 中能够经过 Thread.sleep() 来让线程休眠,从而使程序暂停履行,Go 中的 time 包下的 Sleep 函数能够让程序暂停或许休眠指定的时刻。

func main(){
   fmt.Println("要开始休眠了.....")
   time.Sleep(3 * time.Second)
   fmt.Println("休眠 3s 完毕.....")
}

履行上述代码,输出成果如下:

要开始休眠了.....
休眠 3s 完毕.....

履行该程序时,观察控制台内容输出的时刻,能够确定两次输出时刻间隔为 3s,其间 time.Second 表明单位为 s,也能够挑选 time.Millisecond 或许 time.Minute 等其他时刻单位。

重复履行

运用 Ticker 结构体的实例化目标能够让程序在指定的时刻间隔下重复履行, time.Tick 函数能够回来一个 Ticker 目标

func main(){
   c := time.Tick(3 * time.Second)
   for t := range c {
      fmt.Printf("time is now %v\n", t)
   }
}

履行上述代码,输出成果如下:

time is now 2022-08-27 12:36:10.594926 +0800 CST m=+3.001155491
time is now 2022-08-27 12:36:13.594966 +0800 CST m=+6.001165447
time is now 2022-08-27 12:36:16.595 +0800 CST m=+9.001168869

如果不手动中止程序,程序会一直履行。

二、时刻与字符串的转化

Go 中将时刻转化成字符串需求运用到 Format 函数,首要运用 time.Date 函数创立一个 Time 结构体实例化目标。

接着运用这个实例化目标调用 Format 函数就能够回来一个字符串类型的时刻

func main() {
   timeType := time.Date(2022, 8, 27, 12, 00, 00, 0,time.Local)
   fmt.Printf("%v\n", timeType) // 2022-08-27 12:00:00 +0800 CST
   fmt.Printf("%T\n", timeType) // time.Time
   layout := "2006-01-02 15:04:05"
   timeStr := timeType.Format(layout)
   fmt.Printf("%v\n", timeStr) // 2022-08-27 12:00:00
   fmt.Printf("%T\n", timeStr) // string
}

其间 layout 表明转化成字符串类型的格局,要注意这儿界说的 layout 时刻是 Go 言语诞生的时刻,不能够运用其他时刻,除此之外 Go 中还界说了其他方式的 layout 常量。

Go 编程 | 连载 32 - 时间与日期

字符串转化成时刻类型也需求这样一个 layout 以及 Parse 函数

func main(){
   t := "2022-09-08 22:04:19"
   layout := "2006-01-02 15:04:05"
   timeType, err := time.Parse(layout, t)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Printf("%v\n", timeType) // 2022-09-08 22:04:19 +0000 UTC
   fmt.Printf("%T\n", timeType) // time.Time
}

在字符串转成时刻目标之后,就能够经过 Time 结构体目标来获取字符串时刻中共的 Year, Month, Day, WeekDay 等信息

字符串转成时刻和时刻转成字符串不同的是:

  • 字符串转成时刻需求运用 time.Parse 函数,除了回来一个时刻目标还会回来一个 err。
  • 时刻转化成字符串需求运用到实例化的 Time 结构体调用 Format 函数,该函数只回来一个 string。

三、时刻的加减与比较

Time 结构体除了能够获取目标中的年月日等信息外,还能够经过 AddSub 函数完成时刻的加减等一些其他的操作。

Go 编程 | 连载 32 - 时间与日期

func main(){
   t := "2022-09-08 22:04:19"
   layout := "2006-01-02 15:04:05"
   timeType, err := time.Parse(layout, t)
   if err != nil {
      log.Fatal(err)
   }
   futureTime := timeType.Add(24 * time.Hour)
   fmt.Printf("%v\n", futureTime)
   diff := futureTime.Sub(timeType)
   fmt.Printf("%v\n", diff)
}

履行上述代码,输出成果如下:

2022-09-09 22:04:19 +0000 UTC
24h0m0s

After, Before, Equal 三个函数能够用来比较时刻目标

func main(){
   t1 := "2022-09-08 22:04:19"
   t2 := "2022-09-09 22:04:19"
   layout := "2006-01-02 15:04:05"
   timeIns1, err := time.Parse(layout, t1)
   if err != nil {
      log.Fatal(err)
   }
   timeIns2, err := time.Parse(layout, t2)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Println(timeIns1.After(timeIns2)) // false
   fmt.Println(timeIns1.Before(timeIns2)) // true
   fmt.Println(timeIns1.Equal(timeIns2)) // false
}