golang RFC2822转换

bvp*_*vpx 1 timestamp go date-conversion

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

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

pet*_*rSO 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)
}
Run Code Online (Sandbox Code Playgroud)

输出:

1410904738
Tue Sep 16 21:58:58 +0000 2014
Run Code Online (Sandbox Code Playgroud)

参考文献:

包装时间

RFC2822:3.3。日期和时间规范

注意:

有一个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"
Run Code Online (Sandbox Code Playgroud)

输出:

2014-09-20 19:40:32 -0400
Run Code Online (Sandbox Code Playgroud)

后来,该问题被修订为Tue Jan 12 02:52:59 -0800 2010使用Twitter API的日期格式。最初,在“失败的鲸鱼”时代,Twitter使用了Ruby-on-Rails,这可能就是为什么他们认为它是Ruby日期格式。

我没有time.RubyDate在示例中使用常量,因为它会引起误解。名为的常量rfc2822可提供更好的文档。

参考文献:

执行:问题518:time.Parse-数字时区和间隔

格式不同。转到修订版0f80c5e80c0e

Twitter搜索现在快了3倍

  • 这似乎不遵循RFC2822。根据第13页,逗号应遵循星期几。另外,日期应采用“日月年”格式-您的示例在格式字符串的末尾包含年份。我认为正确的格式字符串应为:`Mon,02 Jan 2006 15:04:05 -0700` (3认同)
  • 这种格式似乎称为time.RubyDate (2认同)