Go中的奇怪行为.Go中的解析函数

时间:2013-09-21 00:34:50

标签: datetime time go

执行以下代码段时,该代码段主要来自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-022006-Feb-022006-Jan-01,则会输出错误的结果,输出甚至不会定期显示,例如0001-01-01 00:00:00 +0000 UTC2013-03-01 00:00:00 +0000 UTC2013-01-03 00:00:00 +0000 UTC

那为什么这个函数表现得如此奇怪呢?我该如何处理它?每次我使用该函数时,我是否应该始终将布局变量定义为2006-Jan-02

感谢。

1 个答案:

答案 0 :(得分:5)

time.Parsetime.Format函数使用layout参数中的数字来标识引用的日期组件:

  • 1:月(也可以Jan / January字样显示)
  • 2:day
  • 3:小时(或者15 24小时制)
  • 4:分钟
  • 5:second
  • 6:年(或者为{4}年的2006
  • 7:时区(或时区代码为MST)。

因此,当您将布局字符串从2006-Jan-02更改为2006-Jan-01时,您说月份会在时间字符串中显示两次,从而导致意外结果。