【问题标题】:Obtaining a Unix Timestamp in Go Language (current time in seconds since epoch)获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)
【发布时间】:2012-03-21 07:10:59
【问题描述】:

我有一些用 Go 编写的代码,我正在尝试更新这些代码以使用最新的每周构建。 (它最后是在 r60 下建造的)。现在一切正常,除了以下一点:

 if t, _, err := os.Time(); err == nil {
   port[5] = int32(t)
 }

关于如何更新它以与当前的 Go 实现一起使用的任何建议?

【问题讨论】:

    标签: unix timestamp go


    【解决方案1】:
    import "time"
    ...
    port[5] = time.Now().Unix()
    

    【讨论】:

    • go1.9.2 darwin/amd64 这始终返回:1969-12-31 19:00:00,大致相当于:time.Unix(0, 0)。这是没有截断的。
    【解决方案2】:

    另一个提示。 time.Now().UnixNano()(godoc) 将为您提供自纪元以来的纳秒。这不是严格意义上的 Unix 时间,但它使用相同的纪元为您提供亚秒级的精度,这很方便。

    编辑:更改为匹配当前的 golang api

    【讨论】:

    • 我知道我正在复活一个旧线程,但我想知道...... Python 清楚地记录了它在不同平台上获得精确时间的问题。请参阅docs.python.org/2/library/time.html 并搜索“精度”。关键是:并不是因为你有一个 float64 ,所以所有小数都是有意义的。 Go 的时间是如何实现的,这个纳秒精度我能相信多少?
    • 这里不行,但time.Now().UnixNano() (reference) 可以。
    【解决方案3】:

    如果你想要它为string,只需通过strconv 转换它:

    package main
    
    import (
        "fmt"
        "strconv"
        "time"
    )
    
    func main() {
        timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
        fmt.Println(timestamp) // prints: 1436773875771421417
    }
    

    【讨论】:

    • 这是什么意思?如果有人想将数字转换为字符串,他可以找到如何做到这一点。或者我应该添加另一个答案:如果你想将它转换为字节数组,只需执行 []byte(...)?
    • @SalvadorDali 实际上这正是我所需要的。如果您愿意,请继续添加您的答案以将其转换为字节数组,我相信最终会有人出现并需要代码。
    • time.Now().UTC().UnixNano() 可以替换为 time.Now().UnixNano() - 文档说结果不依赖于与 t 关联的位置.
    【解决方案4】:

    基于此处另一个答案的想法,为了获得人类可读的解释,您可以使用:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        timestamp := time.Unix(time.Now().Unix(), 0)
        fmt.Printf("%v", timestamp) // prints: 2009-11-10 23:00:00 +0000 UTC
    }
    

    The Go Playground 试试吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      • 2015-09-22
      • 2020-04-11
      • 2019-04-30
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多