Go语言中日期和时间操作入门
日期和时间操作是任何编程语言中的关键任务之一。Go语言(Golang)提供了强大且直观的time包,可以执行所有基本操作:获取当前时间、解析字符串、格式化、计算时间差、创建定时器等等。与其他一些语言不同,Go使用独特的参考时间格式,这使得代码更具可读性和可预测性。在本文中,我们将通过实际示例详细解析time包的主要功能。
基本类型与获取当前时间
time.Time类型
time包中的核心类型是time.Time结构体。它存储有关秒、纳秒、时区和单调计数器(用于精确测量)的信息。
获取当前时刻
要获取当前时间,使用time.Now()函数。它基于系统设置返回本地时间。
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("当前时间:", now) fmt.Println("年:", now.Year()) fmt.Println("月:", now.Month()) fmt.Println("日:", now.Day()) fmt.Println("时:", now.Hour()) fmt.Println("分:", now.Minute()) fmt.Println("秒:", now.Second()) fmt.Println("纳秒:", now.Nanosecond()) fmt.Println("星期几:", now.Weekday())}手动创建时间
您可以使用time.Date()函数创建特定的时间点。它接受年、月、日、时、分、秒、纳秒和时区。
package main
import ( "fmt" "time")
func main() { // 2025年3月15日,14:30:00,UTC specificDate := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("创建的日期:", specificDate)}日期解析与格式化
Go的参考格式
Go使用独特的格式化方法:不是使用像YYYY-MM-DD这样的代码,而是使用参考日期 Mon Jan 2 15:04:05 MST 2006(或简写为2006-01-02T15:04:05Z07:00)。这意味着要指定年份,您写2006;月份写01;日期写02;小时写15(或12小时制用03);分钟写04;秒写05。
将时间格式化为字符串
Format()方法根据给定的模板将time.Time转换为字符串。
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("标准格式:", now.Format("2006-01-02 15:04:05")) fmt.Println("中文格式:", now.Format("2006年01月02日 15:04")) fmt.Println("仅日期:", now.Format("02 Jan 2006")) fmt.Println("12小时制:", now.Format("03:04:05 PM"))}将字符串解析为日期
time.Parse()函数将字符串转换为time.Time。重要的是字符串必须与模板匹配。
package main
import ( "fmt" "time")
func main() { dateStr := "2025-03-15 14:30:00" layout := "2006-01-02 15:04:05" parsedTime, err := time.Parse(layout, dateStr) if err != nil { fmt.Println("解析错误:", err) return } fmt.Println("解析后的时间:", parsedTime) fmt.Println("星期几:", parsedTime.Weekday())}带时区的解析
对于带时区的字符串,使用time.ParseInLocation()或在模板中指定偏移量(Z07:00)。
package main
import ( "fmt" "tim