获取 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 时间戳(当前时间,以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章

r语言 怎样把unix时间戳转换回时间

Time-Go语言学习笔记

如何将 C 中的 unix 时间戳作为 int 获取?

Java从unix时间戳获取当前日期[重复]

如何利用PHP时间戳获取当前时间

PHP 如何在 unix 中获取服务器的时间戳? [复制]