解析时间,格式为“ 02/01/2006”有效,但格式为“ 02/01/2003”无效

时间:2019-09-27 19:24:21

标签: go

为什么第一种格式有效,而第二种无效

package main

import (
    "fmt"
    "time"
)

func main() {

    date := "21/07/1993"
    in := "02/01/2006"
    out := "02-01-2006"
    dt, err := time.Parse(in, date)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(dt.Format(out))

    date = "21/07/1993"
    in = "02/01/2003"
    out = "02-01-2003"
    dt, err = time.Parse(in, date)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(dt.Format(out))
}

输出

21-07-1993
parsing time "21/07/1993" as "02/01/2003": cannot parse "93" as "0"
01-01-1012

https://play.golang.org/p/Ht0XZVs54ta

3 个答案:

答案 0 :(得分:2)

这是一个常见的困惑。日期格式不是示例日期。每个日期元素均以格式中的特定数字表示。 2006表示年份,02是日期,01是月份。因此2003年不是有效格式的一部分。

答案 1 :(得分:2)

您必须在格式字符串中使用Year 2006。

答案 2 :(得分:0)

我认为这很简单,因为数字21不能是一个月。由于不可能是一个月,因此解析器可以推断出这是一天。但是,在第二个示例中,“ 02”可以是一个月或一天。您必须将数据整理成一种格式,这样才能更清楚地确定是哪一天和哪个月。