获取Go语言的Unix时间戳(当前时间,以秒为单位)


84

我有一些用Go编写的代码,我正在尝试更新这些代码以使用最新的每周构建。(它最后一次在r60下构建)。现在,除以下位外,其他所有东西都在工作:

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

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

Answers:


166
import "time"
...
port[5] = int32(time.Now().Unix())

41
警报:Unix()返回值是类型int64。截断类型int64int322038年问题的一个示例。
peterSO

1
go1.9.2 darwin / amd64会始终返回:1969-12-31 19:00:00,大致相当于:time.Unix(0,0)。这是不会被截断的。
育种

31

如果您希望string通过strconv以下方式进行转换:

package main

import (
    "fmt"
    "strconv"
    "time"
)

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

这有什么意义呢?如果有人想将数字转换为字符串,则可以找到方法。还是我应该添加另一个答案:如果要将其转换为字节数组,只需[] byte(...)?
萨尔瓦多·达利

11
@SalvadorDali实际上,这正是我所需要的。继续并添加您的答案以将其转换为字节数组,如果您想确保某个人最终会出现并需要代码。
anon58192932'6

3
time.Now()。UTC()。UnixNano()可以替换为time.Now()。UnixNano()-文档说结果不取决于与t关联的位置。
阿布·朱奈德

16

另一个提示。 time.Now().UnixNano()(godoc)将为您提供自纪元以来的十亿分之一秒。严格来说,这不是Unix时间,但是使用同一纪元可以使您获得亚秒级的精度,这很方便。

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


1
我知道我正在恢复旧线程,但我想知道... Python清楚地记录了在不同平台上获取准确时间所带来的问题。参见docs.python.org/2/library/time.html并搜索“ precision”。关键是:并不是因为您有一个float64,所以所有小数点都是有效的。Go的时间是如何实现的,我可以相信这个纳秒精度吗?
Niriel

5
这在这里不起作用,但是time.Now().UnixNano()参考)可以。
Jo Liss

0

在这里的另一个答案的基础上,要获得易于理解的解释,可以使用:

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
}

Go Playground中尝试一下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.