golang,go,博客,开源,编程
在 Go 中,时间的格式化是一个常见的需求,但与许多编程语言不同,Go 的 time
包使用了一种特殊的时间格式化方式。Go 使用一个“基准时间”来定义日期和时间格式,它使用的基准时间是 Mon Jan 2 15:04:05 2006 UTC 2006。这种设计可能一开始让人觉得不直观,但实际上它是非常灵活和强大的。
在 Go 中,时间格式化的核心是使用 time.Format
方法。该方法的参数是一个格式字符串,其中的每个部分代表一个特定的时间部分,例如:
2006
- 年01
- 月02
- 日03
- 小时(12小时制)15
- 小时(24小时制)04
- 分钟05
- 秒PM
- 上下午标志Mon
- 星期(缩写)January
- 月份全名package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
// 使用指定的时间格式进行格式化
// 格式化为 "YYYY-MM-DD HH:MM:SS"
fmt.Println(now.Format("2006-01-02 15:04:05"))
// 格式化为 "MM/DD/YYYY"
fmt.Println(now.Format("01/02/2006"))
// 格式化为 "Day, Month Date, Year"
fmt.Println(now.Format("Monday, January 2, 2006"))
// 格式化为 "HH:MM:SS AM/PM"
fmt.Println(now.Format("03:04:05 PM"))
}
2025-01-07 15:30:00
01/07/2025
Tuesday, January 7, 2025
03:30:00 PM
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05"))
这会输出类似 2025-01-07 15:30:00
的格式。
now := time.Now()
fmt.Println(now.Format("2006-01"))
输出 2025-01
。
now := time.Now()
fmt.Println(now.Format("2006-01-02"))
输出 2025-01-07
。
now := time.Now()
fmt.Println(now.Format("15:04:05"))
输出 15:30:00
。
除了格式化时间,Go 还提供了 time.Parse
和 time.ParseInLocation
方法,可以将字符串解析为时间类型。你可以结合这两者将时间字符串进行格式化和解析。
package main
import (
"fmt"
"time"
)
func main() {
// 假设有一个时间字符串
timeStr := "2025-01-07 15:30:00"
// 使用与格式化相同的格式来解析时间
parsedTime, err := time.Parse("2006-01-02 15:04:05", timeStr)
if err != nil {
fmt.Println("Error parsing time:", err)
return
}
// 输出解析后的时间
fmt.Println("Parsed time:", parsedTime)
}
package main
import (
"fmt"
"time"
)
func main() {
// 假设有一个日期字符串
dateStr := "2025-01-07"
// 解析为时间对象
parsedDate, err := time.Parse("2006-01-02", dateStr)
if err != nil {
fmt.Println("Error parsing date:", err)
return
}
// 输出解析后的日期
fmt.Println("Parsed date:", parsedDate)
}
Go 的 time
包不仅支持基本的时间格式,还支持一些高级功能,如 time.UTC()
转换、时间格式的国际化以及自定义格式。
time.UTC
转换为 UTC 时间now := time.Now()
fmt.Println("Local time:", now)
fmt.Println("UTC time:", now.UTC().Format("2006-01-02 15:04:05"))
time.In
转换为指定时区时间loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println("Error loading location:", err)
return
}
now := time.Now()
fmt.Println("Local time:", now)
fmt.Println("Shanghai time:", now.In(loc).Format("2006-01-02 15:04:05"))
如果需要将时间戳转换为格式化的时间:
now := time.Now()
timestamp := now.Unix() // 获取 Unix 时间戳(秒级)
fmt.Println("Unix timestamp:", timestamp)
fmt.Println("Formatted time:", time.Unix(timestamp, 0).Format("2006-01-02 15:04:05"))
time.Format
自定义格式你可以根据自己的需求自定义格式。例如:
fmt.Println(now.Format("2006年01月02日 15时04分05秒"))
输出类似:2025年01月07日 15时30分00秒
Go 的时间格式化通过基准时间(2006-01-02 15:04:05)来设计,这种方式非常灵活和强大。无论是格式化时间还是解析字符串,都非常直接和高效。通过熟练掌握 time.Format
和 time.Parse
,你可以轻松实现各种时间格式化需求。
time.Format
来格式化时间。time.Parse
来解析时间字符串。time.In
, time.UTC
)来处理不同地区的时间。这样,你就能优雅地在 Go 中处理时间了!