time.parse:为什么golang错误地解析时间?

The*_*hat 2 time go

我正在尝试解析一个字符串作为时间,但不幸的是得到错误的月份(1月而不是6月)

package main

import "fmt"
import "time"

func main() {

    t := "2014-06-23T20:29:39.688+01:00"
    tc, _ := time.Parse("2006-01-02T15:04:05.000+01:00", t)

    fmt.Printf("t was %v and tc was %v", t, tc)

}
Run Code Online (Sandbox Code Playgroud)

Elw*_*nar 11

问题是您的时区偏移在布局中定义不明确:参考偏移是-0700.您将自己定义为+01:00,因此将01其解释为月份并删除之前定义的月份.而且,由于你的工作偏移也是01如此,它被解析为1月.

以下示例适用于我的游乐场

package main

import "fmt"
import "time"

func main() {

    t := "2014-06-23T20:29:39.688+01:00"
    tc, _ := time.Parse("2006-01-02T15:04:05.000-07:00", t)

    fmt.Printf("t was %v and tc was %v", t, tc)

}
Run Code Online (Sandbox Code Playgroud)

  • 因为年份字符串是“2006”。 (2认同)

Jam*_*dge 5

您的布局字符串不正确.布局字符串中的数字具有特殊含义,您使用1两次:一次在月份部分,一次在时区部分.您正在解析的字符串中的时区是01:00,因此您将存储1到月份中.这解释了为什么返回的月份是1月(第一个月).

更正的布局字符串是2006-01-02T15:04:05.000-07:00.或者,如果您对使用Z表示UTC 感到满意,则time.RFC3339常量可能是合适的.