time 包为我们提供了一个数据类型 time.Time(作为值使用)以及显示和测量时间和日期的功能函数。
    当前时间可以使用 time.Now() 获取,或者使用 t.Day()t.Minute() 等等来获取时间的一部分;你甚至可以自定义时间格式化字符串,例如: fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year()) 将会输出 21.07.2011
    Duration 类型表示两个连续时刻所相差的纳秒数,类型为 int64。Location 类型映射某个时区的时间,UTC 表示通用协调世界时间。
    包中的一个预定义函数 func (t Time) Format(layout string) string 可以根据一个格式化字符串来将一个时间 t 转换为相应格式的字符串,你可以使用一些预定义的格式,如:time.ANSICtime.RFC822
    一般的格式化设计是通过对于一个标准时间的格式化描述来展现的,这听起来很奇怪,但看下面这个例子你就会一目了然:

    1. fmt.Println(t.Format("02 Jan 2006 15:04"))

    输出:

    1. 21 Jul 2011 10:31

    其它有关时间操作的文档请参阅 官方文档译者注:国内用户可访问 该页面 )。
    示例 4.20 time.go

    1. package main
    2. import (
    3. "fmt"
    4. "time"
    5. )
    6. var week time.Duration
    7. func main() {
    8. t := time.Now()
    9. fmt.Println(t)
    10. fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year())
    11. fmt.Printf("%4d%02d%02d %02d:%02d:%02d\n", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
    12. t = time.Now().UTC()
    13. fmt.Println(t)
    14. fmt.Println(time.Now())
    15. // calculating times:
    16. week = 60 * 60 * 24 * 7 * 1e9 // must be in nanosec
    17. week_from_now := t.Add(week)
    18. fmt.Println(week_from_now)
    19. // formatting times:
    20. fmt.Println(t.Format(time.RFC822))
    21. fmt.Println(t.Format(time.ANSIC))
    22. fmt.Println(t.Format("02 Jan 2006 15:04"))
    23. s := t.Format("20060102")
    24. fmt.Println(t, "=>", s)
    25. }

    输出结果:

    1. 2020-10-28 15:55:47.568703 +0800 CST m=+0.017003401
    2. 28.10.2020
    3. 20201028 15:55:47
    4. 2020-10-28 07:55:47.6496991 +0000 UTC
    5. 2020-10-28 15:55:47.6506974 +0800 CST m=+0.098997801
    6. 2020-11-04 07:55:47.6496991 +0000 UTC
    7. 28 Oct 20 07:55 UTC
    8. Wed Oct 28 07:55:47 2020
    9. 28 Oct 2020 07:55
    10. 2020-10-28 07:55:47.6496991 +0000 UTC => 20201028

    如果你需要在应用程序在经过一定时间或周期执行某项任务(事件处理的特例),则可以使用 time.After 或者 time.Ticker:我们将会在第 14.5 节讨论这些有趣的事情。 另外,time.Sleep(Duration d) 可以实现对某个进程(实质上是 goroutine)时长为 d 的暂停