Golang中如何将字符串日期解析为yyyy-mm-dd格式
Golang中如何将字符串日期解析为yyyy-mm-dd格式 以下是我正在尝试的代码段:
package main
import (
"fmt"
"time"
)
func main(){
const format = "2005-03-04"
pdate,_ := time.Parse(format, "2015-05-06")
fmt.Println(pdate)
const shortForm = "2006-01-02"
t, _ := time.Parse(shortForm, "2013-02-03")
fmt.Println(t)
}
对应的输出如下:
0001-01-01 00:00:00 +0000 UTC 2013-02-03 00:00:00 +0000 UTC
尽管我使用了相同的语法,为什么结果会不同呢?
更多关于Golang中如何将字符串日期解析为yyyy-mm-dd格式的实战教程也可以访问 https://www.itying.com/category-94-b0.html
time.Parse 的文档说明:
Parse 解析一个格式化的字符串并返回它所代表的时间值。布局通过展示参考时间(定义为
Mon Jan 2 15:04:05 -0700 MST 2006)如果作为值将如何被解释来定义格式;它作为输入格式的示例。然后将对输入字符串进行相同的解释。
这意味着你不能使用像 “2005-03-04” 这样的任意日期;它必须是 “魔法” 值 2006-01-02 15:04:05。
更多关于Golang中如何将字符串日期解析为yyyy-mm-dd格式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你的代码中使用了不同的布局字符串,这是导致解析结果不同的原因。在Go语言中,time.Parse 使用的布局字符串必须基于参考时间 Mon Jan 2 15:04:05 MST 2006 来定义。
在你的第一个例子中:
const format = "2005-03-04"
pdate,_ := time.Parse(format, "2015-05-06")
布局字符串 "2005-03-04" 不符合Go的时间布局约定。Go解析器会尝试将 "2015-05-06" 按照这个格式解析,但由于布局字符串无效,导致解析失败,返回了零值时间。
正确的做法是使用基于参考时间的布局字符串。对于 yyyy-mm-dd 格式,应该使用 "2006-01-02":
package main
import (
"fmt"
"time"
)
func main() {
// 正确的布局字符串
const layout = "2006-01-02"
// 解析字符串日期
t, err := time.Parse(layout, "2015-05-06")
if err != nil {
fmt.Println("解析错误:", err)
return
}
fmt.Println("解析结果:", t)
fmt.Println("格式化输出:", t.Format(layout))
// 另一个例子
t2, _ := time.Parse(layout, "2023-12-25")
fmt.Println("另一个日期:", t2.Format(layout))
}
输出结果:
解析结果: 2015-05-06 00:00:00 +0000 UTC
格式化输出: 2015-05-06
另一个日期: 2023-12-25
关键点:
- 布局字符串中的数字是固定的:
2006表示年,01表示月,02表示日 - 这些数字对应参考时间
Mon Jan 2 15:04:05 MST 2006的各个部分 - 布局字符串中的分隔符(如
-)需要与输入字符串中的分隔符完全匹配
如果你需要处理不同格式的日期字符串,可以定义不同的布局:
// 处理斜杠分隔的日期
t1, _ := time.Parse("2006/01/02", "2015/05/06")
// 处理没有分隔符的日期
t2, _ := time.Parse("20060102", "20150506")
// 处理带时间的日期
t3, _ := time.Parse("2006-01-02 15:04:05", "2015-05-06 14:30:00")
在你的第二个例子中使用了正确的布局字符串 "2006-01-02",所以能够成功解析 "2013-02-03"。第一个例子使用了无效的布局 "2005-03-04",导致解析失败。

