从UnixNano()到Time {}

时间:2015-07-30 14:52:35

标签: go sqlite

我想将UnixNano() int64时间戳转换回time.Time{}

退一步,这是一个更大的问题。

我们有一个带时间戳的数据库,我们使用这些时间戳来提取条目。在纳米时代,永远不应该有重复的时间戳。该数据库是一个嵌入式SQLite3数据库(通过“github.com/mattn/go-sqlite3”驱动程序),其中的标记保存在INTEGER列中。我们使用数字值进行一些排序和过滤,以选择子句的形式和几个视图中进行。

因此,当我们将整数绑定到我们准备好的语句时,如:

INSERT INTO "event" ("timestamp", "command", "data") VALUES (?, ?, ?)

我们绑定time.Now()。UnixNano()。

然而,当我尝试将项目转换为数据结构时,我发现我无法准确地获取UnixNano时间并将其重新组合回time.Time {}结构。

他们从不匹配。

我该怎么做?

1 个答案:

答案 0 :(得分:12)

t1 := time.Now()
fmt.Println(t1, t1.UnixNano())
t2 := time.Unix(0, t1.UnixNano())
fmt.Println(t2, t2.UnixNano())

给你

2009-11-10 23:00:00 +0000 UTC 1257894000000000000
2009-11-10 23:00:00 +0000 UTC 1257894000000000000

http://play.golang.org/p/Q68IaR9zPK

BTW,你确定保存到数据库的整数值没有被截断(例如可以存储int64)吗?