我通过evernote gem访问Evernote API for ruby on rails,我将这些对象(笔记本,标签,笔记等)存储在Postgresql数据库中。
Evernote返回如下所示的时间戳:
evernote api documentation表示这是自1970年1月1日00:00:00 GMT基准时间以来经过的毫秒数
我在rails控制台中进行了以下练习,试图重建日期。
evernote_timestamp_base = Time.gm(1970,01,01,00,00,00)
=> 1970-01-01 00:00:00 UTC
evernote_timestamp_base + 1344138641000
=> 44564-01-22 04:43:20 UTC
绝对不对。但是砍下最后三个零会产生正确的日期:
evernote_timestamp_base + 1344138641
=> 2012-08-05 03:50:41 UTC
我在这里遗漏了什么吗?与最后三个零有什么关系?我是否需要解析和删除evernote timstamp值,然后将它们添加到1970年的基础,还是有更简单的方法?
另外,用于存储这些值的最佳Postgresql数据类型是什么?
提前感谢您的帮助。
答案 0 :(得分:5)
在postgresql中,您可以使用时间戳[with | without]时区作为列的类型。
unix时间戳定义为自1970年1月1日00:00:00 GMT以来的秒数,这是Ruby和许多其他系统使用和/或支持的。 PostgreSQL可以为您进行转换。只需将值以秒为单位传递给to_timestamp函数。
SELECT to_timestamp(1344138641000/1000.0)
要将其转换回来使用
SELECT EXTRACT(EPOCH FROM col)
答案 1 :(得分:5)
要在Ruby中执行此操作,请使用Time.at.您需要除以1000,因为Evernote时间戳以毫秒为单位,而Ruby / Unix时间戳以秒为单位。
createdNote = noteStore.createNote(authToken, note)
createTime = Time.at(createdNote.created / 1000);
puts "Note was created at #{createTime}"