从UnixNano()到Time {}

grm*_*tin 6 sqlite go

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

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

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

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

INSERT INTO "event" ("timestamp", "command", "data") VALUES (?, ?, ?)
Run Code Online (Sandbox Code Playgroud)

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

但是,当我尝试将项目转换为数据结构时,我发现我无法准确地将UnixNano时间重新组合回到time.Time {}结构.

他们从不匹配.

我该怎么做?

Ale*_*hov 15

t1 := time.Now()
fmt.Println(t1, t1.UnixNano())
t2 := time.Unix(0, t1.UnixNano())
fmt.Println(t2, t2.UnixNano())
Run Code Online (Sandbox Code Playgroud)

给你

2009-11-10 23:00:00 +0000 UTC 1257894000000000000
2009-11-10 23:00:00 +0000 UTC 1257894000000000000
Run Code Online (Sandbox Code Playgroud)

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

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