Go 的时间格式化为什么是 2006-01-02 15:04:05?
go语言中有个很特别的时间格式format,在我们使用 Format格式化时间的时候, format的参数格式字符串必须是 2006-01-02 15:04:05 才能格式出正确的时间来, 这是个很特别的字符串, 通过分析拆分后可以得出的每个代表时间和日期的数字都不重复。 这里的 2006-01-02 15:04:05 这里的数字可以对年月日时分秒分别拆分为一个独立的数字格式, 可以看出拆分后的数字都是独立的 都分别代表对应位置的日期,如 2006表示4位年份, 06表示2位年份, 01表示2位月份,1表示不带0的月份, 02表示2位日期,2表示不带0的日期, 15表示小时, 04表示分钟,4表示不带0的分钟, 05表示秒, 5表示不带0的秒等 go time日期时间格式实例: package main import ( "fmt" "time" ) func main() { // 获取当前时间 now := time.Now() // time.Now()返回的类型是 time.Time 详情参考 ~/.gvm/go/src/time/time.go fmt.Printf("%d-%d-%d %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) // 2024-5-5 10:41:37 // 注意这里的Format() // func (t time.Time) Format(layout string) string // 这里的layout必须是这个时间 2006-01-02 15:04:05 其组合格式可以修改,但是数字不可修改 fmt.Printf("%v\n", now.Format("2006-01-02 15:04:05")) // 为什么是这个时间(2006-01-02 15:04:05),据说这个时间是go语言想法诞生的时间 // 2024-05-05 10:45:39 fmt.Printf("%v\n", now.Format("06")) // 年份: 06表示2位年份 如:24, 2006表示4位年份,如 2024 fmt.Printf("%v\n", now.Format("1")) // 当前月份: 1表示 1-12, 如果是01表示 01-12 fmt.Printf("%v\n", now.Format("05")) // 当前秒: 05表示 01-59 , 如果是5则表示秒 1-59 } 为什么这样设计? 实际上 2006-01-02 15:04:05 是一个参考时间的格式,也就是其它语言中 Y-m-d H:i:s 格式,在功能上用于时间的格式化处理和规范。 那为什么是 2006-01-02 15:04:05 呢?其实这些 ”数字“ 是有意义的,每个布局字符串都是一个时间戳的表示,并非随便写的时间点。 Jan 2 15:04:05 2006 MST 1 2 3 4 5 6 -7 我们也可以将其记忆为 2006 年 1 月 2 日 3 点 4 分 5 秒。 不方便记,go将会在 Go1.20 增加如下三个常量: DateTime = "2006-01-02 15:04:05" DateOnly = "2006-01-02" TimeOnly = "15:04:05"