执行以下代码段时,该代码段主要来自Go's time package documentation and its Parse function example:
package main
import (
"time"
"fmt"
)
var shortForm = "2006-Jan-02"
t, _ := time.Parse(shortForm, "2013-Feb-03")
fmt.Println(t)
然后,您可以在控制台中获得正确的结果2013-02-03 00:00:00 +0000 UTC
。
但是,如果稍微更改shortForm
值,例如2007-Jan-02
,2006-Feb-02
或2006-Jan-01
,则会输出错误的结果,输出甚至不会定期显示,例如0001-01-01 00:00:00 +0000 UTC
,2013-03-01 00:00:00 +0000 UTC
或2013-01-03 00:00:00 +0000 UTC
。
那为什么这个函数表现得如此奇怪呢?我该如何处理它?每次我使用该函数时,我是否应该始终将布局变量定义为2006-Jan-02
?
感谢。
答案 0 :(得分:5)
time.Parse
和time.Format
函数使用layout参数中的数字来标识引用的日期组件:
1
:月(也可以Jan
/ January
字样显示)2
:day 3
:小时(或者15
24小时制)4
:分钟5
:second 6
:年(或者为{4}年的2006
)7
:时区(或时区代码为MST
)。因此,当您将布局字符串从2006-Jan-02
更改为2006-Jan-01
时,您说月份会在时间字符串中显示两次,从而导致意外结果。