golang RFC2822转换

时间:2014-09-20 20:48:55

标签: go timestamp date-conversion

在包含的库中是否有一个库或函数将RFC时间戳转换为Unix时间(或者我可以格式化为Unix时间的其他格式?)

例如,我想将此Tue Sep 16 21:58:58 +0000 2014更改为Unix时间戳。

1 个答案:

答案 0 :(得分:5)

例如,

package main

import (
    "fmt"
    "time"
)

func main() {
    s := "Tue Sep 16 21:58:58 +0000 2014"
    const rfc2822 = "Mon Jan 02 15:04:05 -0700 2006"
    t, err := time.Parse(rfc2822, s)
    if err != nil {
        fmt.Println(err)
        return
    }
    u := t.Unix()
    fmt.Println(u)
    f := t.Format(time.UnixDate)
    fmt.Println(f)
}

输出:

1410904738
Tue Sep 16 21:58:58 +0000 2014

参考文献:

Package time

RFC2822: 3.3. Date and Time Specification

注:

有一个名为time的包RubyDate格式常量;这用词不当。

Go作者被Go Issue 518误导,声称Ruby Time.now输出Tue Jan 12 02:52:59 -0800 2010。然而,

#!/usr/bin/env ruby
print Time.now
print "\n"

输出:

2014-09-20 19:40:32 -0400

稍后,该问题被修改为说Tue Jan 12 02:52:59 -0800 2010是Twitter API使用的日期格式。一开始,在"失败的鲸鱼"几天,Twitter使用Ruby-on-Rails,这可能是他们认为它是Ruby日期格式的原因。

我没有在我的例子中使用time.RubyDate常量,因为它具有误导性。名为rfc2822的常量提供了更好的文档。

参考文献:

Go: Issue 518: time.Parse - numeric time zones and spacing

Diff of format.go revision 0f80c5e80c0e

Twitter Search is Now 3x Faster