5

当您执行以下代码片段时,该代码片段主要来自Go 的时间包文档及其 Parse 函数示例

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

谢谢。

4

1 回答 1

7

time.Parseand函数使用布局参数中的time.Format数字来识别引用了哪个日期组件:

  • 1: 月(或者可以以Jan/的形式出现January
  • 2: 天
  • 3: 小时(或者1524 小时制)
  • 4: 分钟
  • 5: 第二
  • 6: 年(或者20064 位数的年份)
  • 7: 时区(或者作为MST时区代码)。

因此,当您将布局字符串从 更改为 时2006-Jan-022006-Jan-01您是说月份在时间字符串中表示了两次,从而导致了意想不到的结果。

于 2013-09-21T00:55:04.797 回答