Go 使用给定的时间戳跟踪当前年份和月份

Go 使用给定的时间戳跟踪当前年份和月份,go,Go,我有一个格式为181020Z的时间戳,它是一个月的第18天,协调世界时1020 我想把它解析成go,time。time给我的是2019-04-18T10:20:00Z,而不是0000-01-18T10:20:00Z 下面是我用来解析时间的代码 now := time.Now() layout := "200601021504Z" timeField := strconv.Itoa(now.Year()) + strconv.Itoa(int(now.Month())) +

我有一个格式为
181020Z
的时间戳,它是一个月的第18天,协调世界时1020

我想把它解析成go,
time。time
给我的是
2019-04-18T10:20:00Z
,而不是
0000-01-18T10:20:00Z

下面是我用来解析时间的代码

    now := time.Now()
    layout := "200601021504Z"
    timeField := strconv.Itoa(now.Year()) + strconv.Itoa(int(now.Month())) + fields[1]
    fmt.Println(timeField) // 20204181050Z
    t, err := time.Parse(layout, timeField)

以下是一种方法:

func main()
    now := time.Now()
    layout := "021504Z"

    t, _ := time.Parse(layout, "181020Z")
    t = t.AddDate(now.Year(), int(now.Month()) - 1, 0) 
    fmt.Println(t)  // 2020-04-18T10:20:00Z


关于你的最后一个解决方案——几乎是正确的)。问题是您的布局(
“200601021504Z”
)需要两位数字表示月份(即
04
,而不是4月份的
4
)。但是
now.Month()
返回不带
0
填充的月份表示法(即
4
)。

在字符串前面加上所需的年和月,并相应地修改布局。你必须告诉parse年和月是什么。@mkopriva我已经用最新的代码更新了代码,但它仍然没有给我正确的解释date@bear您的更新解决方案实际上是有效的:。@icza它不是),但只需要一个小补丁。看我的answer@GrigoriyMikhalkin你说得对,我想你是说格式不正确。是的,月份包含两位数字。