Go语言通过time包提供时间处理功能,使用time.Now()获取当前时间,Format方法按“2006-01-02 15:04:05”格式化输出,Parse解析时间字符串,支持时区、时间计算、比较及Sleep、Ticker等定时操作。

Go语言通过time包提供了强大的日期和时间处理能力。无论是获取当前时间、格式化输出、解析字符串,还是进行时间计算,time包都能简洁高效地完成。
获取当前时间
使用time.Now()可以获取当前的本地时间,返回一个time.Time类型的值。
now := time.Now() fmt.Println(now) // 输出类似:2024-05-10 14:30:22.123456 +0800 CST m=+0.000000001
你还可以单独获取年、月、日、小时等信息:
fmt.Println(now.Year()) // 年 fmt.Println(now.Month()) // 月(time.Month 类型) fmt.Println(now.Day()) // 日 fmt.Println(now.Hour()) // 小时 fmt.Println(now.Weekday()) // 星期几
格式化时间输出
Go 的时间格式化不使用Y-m-d H:i:s这类占位符,而是使用固定的参考时间:
立即学习“go语言免费学习笔记(深入)”;
2006-01-02 15:04:05(这是 Go 语言的“魔数”格式)fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("2006/01/02"))
fmt.Println(now.Format("15:04:05"))
fmt.Println(now.Format(time.RFC3339)) // 内建常量,输出如:2024-05-10T14:30:22+08:00常用格式示例:
-
"2006-01-02"→ 日期 -
"15:04:05"→ 时间 -
"2006-01-02 15:04:05"→ 完整时间 -
time.Kitchen→ 12小时制时间(如:1:30PM)
解析时间字符串
使用time.Parse()将字符串转换为time.Time类型,第一个参数是格式模板,第二个是待解析的字符串。
t, err := time.Parse("2006-01-02 15:04:05", "2024-05-10 10:00:00")
if err != nil {
log.Fatal(err)
}
fmt.Println(t)如果字符串包含时区,建议使用time.ParseInLocation()指定位置:
loc, _ := time.LoadLocation("Asia/Shanghai")
t, _ := time.ParseInLocation("2006-01-02 15:04:05", "2024-05-10 10:00:00", loc)时间计算与比较
time.Time支持加减、比较和间隔计算。
-
加时间:
now.Add(2 * time.Hour) -
减时间:
now.Add(-30 * time.Minute) -
计算差值:
duration := t2.Sub(t1) -
判断先后:
t1.Before(t2)、t1.After(t2)、t1.Equal(t2)
常见时间单位:
time.Second time.Minute time.Hour time.Millisecond time.Microsecond time.Nanosecond
定时与休眠
使用time.Sleep()让程序暂停执行:
fmt.Println("开始")
time.Sleep(2 * time.Second)
fmt.Println("2秒后")使用time.Ticker实现周期性任务:
ticker := time.NewTicker(1 * time.Second)
go func() {
for t := range ticker.C {
fmt.Println("每秒执行一次:", t)
}
}()
// 别忘了在适当时候停止:ticker.Stop()基本上就这些。Go 的 time 包设计直观,只要记住那个“2006-01-02 15:04:05”的格式模板,处理时间就很轻松了。










