Golang中字符串解析为日期不正确的问题如何解决
Golang中字符串解析为日期不正确的问题如何解决 我有这段代码:
package main
import (
"fmt"
"time"
)
const (
layoutISO = "2006-01-02"
layoutUS = "January 2, 2006"
custom = "%mm/%dd%yy"
)
func main() {
date := "12/31/19" // "1999-12-31"
t, _ := time.Parse(custom, date)
fmt.Println(t) // 1999-12-31 00:00:00 +0000 UTC
fmt.Println(t.Format(layoutUS)) // December 31, 1999
}
但它返回了错误的结果,它返回:
0001-01-01 00:00:00 +0000 UTC
January 1, 0001
我的错误在哪里?
更多关于Golang中字符串解析为日期不正确的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html
Go 不使用像 %Y、%d 等格式化参数。它使用一个“神奇”的日期:2006-01-02 15:04:05-0700。
要解析 12/31/19(你是指 12/31/99 吗?),请使用 time.Parse("01/02/06", "12/31/19")。
func main() {
fmt.Println("hello world")
}
更多关于Golang中字符串解析为日期不正确的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
2006-01-02 15:04:05-0700
太好了,非常感谢。
我明白了我的错误,我原本以为要使用的格式是用于重写日期的格式,但实际上它应该是给定日期/字符串本身的格式。
在我的例子中,输入日期格式是 12/31/19,也就是 m/d/y,所以用 1 表示月,2 表示日,2006 或 1061 表示年,那么它就应该写成 1/2/06。如果我的日期是 12/31/2019,那么它就应该写成 1/2/2006。下面这段代码是有效的:
package main
import (
"fmt"
"time"
)
const (
layoutISO = "2006-01-02"
layoutUS = "January 2, 2006"
custom = "1/2/06"
)
func main() {
date := "12/31/19"
t, err := time.Parse(custom, date) // 输入字符串的格式是:custom,不能使用其他格式。
fmt.Println(t, err)
fmt.Println(t.Format(layoutUS)) // 打印日期的格式是:layoutUS,可以使用所有其他格式。
}
你的问题在于使用了错误的布局字符串。Go语言的时间解析使用特定的参考时间:Mon Jan 2 15:04:05 MST 2006。
对于你的日期格式 "12/31/19"(月/日/年),正确的布局应该是 "01/02/06"。
以下是修正后的代码:
package main
import (
"fmt"
"time"
)
func main() {
date := "12/31/19"
// 使用正确的布局:01表示月,02表示日,06表示两位数的年份
t, err := time.Parse("01/02/06", date)
if err != nil {
fmt.Println("解析错误:", err)
return
}
fmt.Println(t) // 2019-12-31 00:00:00 +0000 UTC
fmt.Println(t.Format("January 2, 2006")) // December 31, 2019
}
如果你想要处理四位数年份的格式 "1999-12-31",布局应该是 "2006-01-02":
package main
import (
"fmt"
"time"
)
func main() {
// 处理四位数年份
date1 := "1999-12-31"
t1, _ := time.Parse("2006-01-02", date1)
fmt.Println(t1) // 1999-12-31 00:00:00 +0000 UTC
// 处理两位数年份
date2 := "12/31/19"
t2, _ := time.Parse("01/02/06", date2)
fmt.Println(t2) // 2019-12-31 00:00:00 +0000 UTC
}
记住Go时间布局的对应关系:
2006:年份01:月份02:日期15:小时(24小时制)04:分钟05:秒MST:时区
对于两位数年份 06,Go会将其解析为:
- 00-68 → 2000-2068
- 69-99 → 1969-1999

