4.1 KiB
在 Go 语言中,time
包提供了丰富的时间和日期处理功能,广泛应用于时间的获取、格式化、解析以及时间间隔的操作。以下是一些常用的 time
包函数及其使用方法:
1. 获取当前时间
Now() Time
返回当前的本地时间。
示例:now := time.Now() fmt.Println("当前时间:", now) // 输出: 当前时间: 2025-03-17 14:30:00.xxx
2. 时间的创建
-
Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
根据指定的年、月、日、时、分、秒、纳秒和时区创建一个时间对象。
示例:t := time.Date(2025, time.March, 17, 14, 30, 0, 0, time.Local) fmt.Println("指定时间:", t) // 输出: 指定时间: 2025-03-17 14:30:00 +0800 CST
-
Unix(sec int64, nsec int64) Time
根据 Unix 时间戳(秒数和纳秒数)创建时间对象。
示例:t := time.Unix(1710651000, 0) fmt.Println("Unix时间对应时间:", t) // 输出: Unix时间对应时间: 2025-03-17 14:30:00 +0800 CST
3. 时间格式化与解析
-
Format(layout string) string
将时间对象格式化为字符串,layout
是格式模板,必须使用固定的参考时间2006-01-02 15:04:05
的形式。
示例:t := time.Now() formatted := t.Format("2006-01-02 15:04:05") fmt.Println("格式化时间:", formatted) // 输出: 格式化时间: 2025-03-17 14:30:00
-
Parse(layout, value string) (Time, error)
将字符串解析为时间对象,layout
是格式模板。
示例:t, err := time.Parse("2006-01-02 15:04:05", "2025-03-17 14:30:00") if err != nil { fmt.Println("解析错误:", err) } else { fmt.Println("解析时间:", t) // 输出: 解析时间: 2025-03-17 14:30:00 +0000 UTC }
-
ParseInLocation(layout, value string, loc *Location) (Time, error)
类似于Parse
,但允许指定时区。
示例:loc, _ := time.LoadLocation("Asia/Shanghai") t, _ := time.ParseInLocation("2006-01-02 15:04:05", "2025-03-17 14:30:00", loc) fmt.Println("解析时间:", t) // 输出: 解析时间: 2025-03-17 14:30:00 +0800 CST
4. 时间计算
-
Add(d Duration) Time
在当前时间上增加一个时间间隔(Duration
)。
示例:t := time.Now() future := t.Add(24 * time.Hour) fmt.Println("一天后的时间:", future)
-
Sub(u Time) Duration
计算两个时间之间的差值,返回一个Duration
。
示例:t1 := time.Now() t2 := t1.Add(2 * time.Hour) duration := t2.Sub(t1) fmt.Println("时间差:", duration) // 输出: 时间差: 2h0m0s
-
Since(t Time) Duration
返回从指定时间到当前时间的时间间隔。
示例:t := time.Date(2025, time.March, 16, 14, 30, 0, 0, time.Local) duration := time.Since(t) fmt.Println("距离现在的时间:", duration) // 输出: 距离现在的时间: 24h0m0s
5. 时间间隔(Duration)
time.Duration
表示时间间隔,通常以纳秒为单位。可以通过常量如time.Second
、time.Minute
等表示固定的时间间隔。
示例:duration := 2*time.Hour + 30*time.Minute fmt.Println("时间间隔:", duration) // 输出: 时间间隔: 2h30m0s
6. 定时器与休眠
-
Sleep(d Duration)
让当前 Goroutine 进入休眠状态,持续指定的时间间隔。
示例:fmt.Println("开始休眠...") time.Sleep(2 * time.Second) fmt.Println("休眠结束!")
-
After(d Duration) <-chan Time
返回一个通道,在指定的时间间隔后发送当前时间。
示例:fmt.Println("等待2秒...") <-time.After(2 * time.Second) fmt.Println("2秒已过!")
7. 时间相关常量
time.Second
、time.Minute
、time.Hour
等
提供了常用的时间单位常量,便于时间间隔的计算。
示例:fmt.Println("一小时有多少秒:", time.Hour.Seconds()) // 输出: 一小时有多少秒: 3600