如何解析Go中的非标准日期/时间? MitteleuropäischeSommerzeit

时间:2014-08-07 12:29:19

标签: time go

我正在尝试解析在电子邮件标头中收到的日期。最近我被困在这个Thu, 7 Aug 2014 14:03:05 +0200 (Mitteleuropäische Sommerzeit)上。我应该使用什么样的布局? Mon, 02 Jan 2006 15:04:05 -0700 (MST)没有做到这一点。

我也尝试了下面的解决方法,但它仍然无效。我不确定为什么Mitt ......没有被替换。

if strings.Contains(d, "Mitteleuropäische Sommerzeit") {
    d = strings.Replace(d, "Mitteleuropäische Sommerzeit", "CEST", 1)
}

2 个答案:

答案 0 :(得分:2)

Mitteleuropäische Sommerzeit部分确实无法识别time部分。但是当你用CEST替换它时,它的效果非常好:

var d = "Thu, 7 Aug 2014 14:03:05 +0200 (Mitteleuropäische Sommerzeit)"
_, err := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700 (MST)", d)
if err != nil {
    fmt.Println(err) // There is indeed an error
}

d = strings.Replace(d, "Mitteleuropäische Sommerzeit", "CEST", 1)
t, err := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700 (MST)", d)
if err != nil {
    fmt.Println(err) // No error this time
}
fmt.Println(t) // 2014-08-07 14:03:05 +0200 CEST

playground

不要忘记在布局中写_2而不是2,这样也可以解析带有两个数字的日子。

答案 1 :(得分:1)

当您已经知道正确的数字偏移时,尝试解析带括号的时区名称是多余的:

Thu, 7 Aug 2014 14:03:05 +0200 (Mitteleuropäische Sommerzeit)

同样具体
Thu, 7 Aug 2014 14:03:05 +0200

您从第一个表示中获得的唯一附加信息是,发送电子邮件的是夏天,电子邮件作者来自的地区是欧洲中部(字面意思是#34;中欧)夏季"。)

然而,与第二个字符串相比,这不会影响time.Time值的表示,因为夏令时调整已经反映在数字时区表示+0200中,这将是{冬天{1}}。

换句话说,在这种情况下,您可以忽略拼写出的时区规范。