我需要解析由使用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
。
有什么想法吗?
答案 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
的形式进行解析时会出现此问题。