一尘不染

时间上的行为异常.Go中的解析函数

go

执行以下代码片段时,这些代码片段主要来自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-02或者2006-Jan-01,它甚至没有定期输出错误的结果,并且输出看起来,如0001-01-01 00:00:00 +0000 UTC2013-03-01 00:00:00 +0000 UTC2013-01-03 00:00:00 +0000 UTC

那么,为什么函数的行为如此奇怪?我该如何处理呢?每次使用该函数时,都应始终将layout变量定义为2006-Jan-02吗?

谢谢。


阅读 176

收藏
2020-07-02

共1个答案

一尘不染

time.Parsetime.Format功能使用的数字在布局参数来标识哪个日期分量称为:

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

所以,当你改变从布局字符串2006-Jan-022006-Jan-01,你说,一个月的时间,由字符串表示的两倍,从而导致意外结果。

2020-07-02