在操场上工作时,Golang时间解析无法正常工作

时间:2017-06-27 13:17:32

标签: datetime go

我需要解析由使用Unix()函数的伪随机日期时间生成器生成的日期时间字符串。生成的日期时间在2010年和2017年之间采用不同的日期和时间对。 这是问题所在,这个版本的代码可以在我的电脑和操场上使用,

package main

import (
    "fmt"
    "time"
)

func main() {
    a := time.Date(2016, 1, 0, 0, 0, 0, 0, time.UTC).Unix()
    kk := time.Unix(a, 0)
    t, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", kk.String())
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

但是下面的版本适用于我的电脑上的游乐场和恐慌,

package main

import (
    "fmt"
    "time"
)

func main() {
    a := time.Date(2018, 1, 0, 0, 0, 0, 0, time.UTC).Unix()
    kk := time.Unix(a, 0)
    t, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", kk.String())
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

这是错误,

panic: parsing time "2017-12-31 03:00:00 +0300 +03" as "2006-01-02 15:04:05.999999999 -0700 MST": cannot parse "+03" as "MST"

我使用的Go版本是go1.8.3 darwin/amd64

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此处的问题与Europe/Istanbul的缩写更改有关。

  

土耳其从EET / EEST(+ 02 / + 03)转为永久+03,   2016-09-07有效。 (感谢Burak AYDIN。)使用" + 03"宁   而不是新时代的发明缩写。

时间包当前不接受+ 03作为EET / EEST,当使用包含+03的日期时间字符串作为时区以2006-01-02 15:04:05.999999999 -0700 MST的形式进行解析时会出现此问题。