获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)
Posted
技术标签:
【中文标题】获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)【英文标题】:Obtaining a Unix Timestamp in Go Language (current time in seconds since epoch) 【发布时间】:2012-03-21 07:10:59 【问题描述】:我有一些用 Go 编写的代码,我正在尝试更新这些代码以使用最新的每周构建。 (它最后是在 r60 下建造的)。现在一切正常,除了以下一点:
if t, _, err := os.Time(); err == nil
port[5] = int32(t)
关于如何更新它以与当前的 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 试试吧。
【讨论】:
以上是关于获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章