Go语言中的时间处理

张开发
2026/5/4 6:19:29 15 分钟阅读
Go语言中的时间处理
Go语言中的时间处理1. 时间类型Go语言的time包提供了时间处理的核心功能。主要类型包括time.Time表示一个具体的时间点time.Duration表示一段时间间隔time.Location表示时区2. 基本时间操作2.1 获取当前时间package main import ( fmt time ) func main() { // 获取当前时间 now : time.Now() fmt.Println(Current time:, now) // 获取UTC时间 utc : time.Now().UTC() fmt.Println(UTC time:, utc) }2.2 时间格式化package main import ( fmt time ) func main() { now : time.Now() // 格式化时间 fmt.Println(RFC3339:, now.Format(time.RFC3339)) fmt.Println(Custom:, now.Format(2006-01-02 15:04:05)) }2.3 时间解析package main import ( fmt time ) func main() { // 解析时间字符串 t, err : time.Parse(2006-01-02, 2023-12-25) if err ! nil { fmt.Println(Error parsing time:, err) return } fmt.Println(Parsed time:, t) }3. 时间计算3.1 时间加减package main import ( fmt time ) func main() { now : time.Now() // 加1小时 oneHourLater : now.Add(time.Hour) fmt.Println(One hour later:, oneHourLater) // 减30分钟 thirtyMinutesAgo : now.Add(-30 * time.Minute) fmt.Println(Thirty minutes ago:, thirtyMinutesAgo) }3.2 时间比较package main import ( fmt time ) func main() { now : time.Now() later : now.Add(time.Hour) // 比较时间 fmt.Println(now before later:, now.Before(later)) fmt.Println(now after later:, now.After(later)) fmt.Println(now equal later:, now.Equal(later)) }3.3 时间差package main import ( fmt time ) func main() { start : time.Now() // 模拟耗时操作 time.Sleep(1 * time.Second) end : time.Now() duration : end.Sub(start) fmt.Println(Duration:, duration) fmt.Println(Seconds:, duration.Seconds()) }4. 时区处理package main import ( fmt time ) func main() { // 获取本地时区 loc, err : time.LoadLocation(Local) if err ! nil { fmt.Println(Error loading location:, err) return } // 获取特定时区 nyc, err : time.LoadLocation(America/New_York) if err ! nil { fmt.Println(Error loading NYC location:, err) return } // 创建带时区的时间 t : time.Date(2023, 12, 25, 10, 0, 0, 0, nyc) fmt.Println(NYC time:, t) // 转换时区 localTime : t.In(loc) fmt.Println(Local time:, localTime) }5. 定时器5.1 一次性定时器package main import ( fmt time ) func main() { // 创建定时器 timer : time.NewTimer(2 * time.Second) fmt.Println(Waiting for timer...) -timer.C fmt.Println(Timer fired!) }5.2 周期性定时器package main import ( fmt time ) func main() { // 创建周期性定时器 ticker : time.NewTicker(1 * time.Second) defer ticker.Stop() go func() { for t : range ticker.C { fmt.Println(Tick at, t) } }() // 等待一段时间 time.Sleep(5 * time.Second) fmt.Println(Done) }6. 实战应用6.1 时间戳转换package main import ( fmt time ) func main() { // 时间转时间戳 now : time.Now() timestamp : now.Unix() fmt.Println(Timestamp:, timestamp) // 时间戳转时间 t : time.Unix(timestamp, 0) fmt.Println(Time from timestamp:, t) }6.2 格式化时间输出package main import ( fmt time ) func formatTime(t time.Time) string { return t.Format(2006-01-02 15:04:05) } func main() { now : time.Now() fmt.Println(Formatted time:, formatTime(now)) }6.3 计算时间差package main import ( fmt time ) func timeSince(t time.Time) string { duration : time.Since(t) switch { case duration time.Minute: return fmt.Sprintf(%d秒前, int(duration.Seconds())) case duration time.Hour: return fmt.Sprintf(%d分钟前, int(duration.Minutes())) case duration 24*time.Hour: return fmt.Sprintf(%d小时前, int(duration.Hours())) default: return fmt.Sprintf(%d天前, int(duration.Hours()/24)) } } func main() { past : time.Now().Add(-2 * time.Hour) fmt.Println(Time since:, timeSince(past)) }7. 总结使用time.Now()获取当前时间使用time.Format()格式化时间使用time.Parse()解析时间字符串使用Add()和Sub()进行时间计算使用Before(),After(),Equal()比较时间使用LoadLocation()处理时区使用NewTimer()和NewTicker()创建定时器掌握时间戳与时间对象的相互转换

更多文章