如何将Evernote API时间戳转换为Postgresql时间戳

时间:2012-08-05 05:45:09

标签: ruby-on-rails postgresql datetime timestamp evernote

我通过evernote gem访问Evernote API for ruby​​ on rails,我将这些对象(笔记本,标签,笔记等)存储在Postgresql数据库中。

Evernote返回如下所示的时间戳:

  • 1344141917000
  • 1344141967000
  • 1344138641000

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数据类型是什么?

提前感谢您的帮助。

2 个答案:

答案 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}"