Ruby on rails 如何将Evernote API时间戳转换为Postgresql时间戳
我通过RubyonRails的EvernoteGem访问EvernoteAPI,并将对象(笔记本、标记、注释等)存储在Postgresql数据库中 Evernote返回的时间戳如下所示:Ruby on rails 如何将Evernote API时间戳转换为Postgresql时间戳,ruby-on-rails,postgresql,datetime,timestamp,evernote,Ruby On Rails,Postgresql,Datetime,Timestamp,Evernote,我通过RubyonRails的EvernoteGem访问EvernoteAPI,并将对象(笔记本、标记、注释等)存储在Postgresql数据库中 Evernote返回的时间戳如下所示: 13441917000 13441967000 1344138641000 表示这是自1970年1月1日00:00:00 GMT基准时间以来经过的毫秒数 为了重建日期,我在rails控制台中进行了以下练习 evernote_timestamp_base = Time.gm(1970,01,01,00,00,
- 13441917000
- 13441967000
- 1344138641000
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数据类型是什么
提前感谢您的帮助。在postgresql中,您可以使用时间戳[带|不带]时区作为列的类型 unix时间戳定义为自1970年1月1日00:00:00 GMT以来的秒数,这是Ruby和其他许多系统使用和/或支持的。PostgreSQL可以为您进行到的转换。只需将以秒为单位的值传递给to_timestamp函数
SELECT to_timestamp(1344138641000/1000.0)
若要将其转换回,请使用
SELECT EXTRACT(EPOCH FROM col)
要在Ruby中实现这一点,请使用Time.at。您需要除以1000,因为Evernote时间戳以毫秒为单位,Ruby/Unix时间戳以秒为单位
createdNote = noteStore.createNote(authToken, note)
createTime = Time.at(createdNote.created / 1000);
puts "Note was created at #{createTime}"
感谢您帮助我认识到我可以将该值视为一个数字(除以1000),而不是文本(我必须解析)。这使得解决方案更容易一些。这更接近地回答了我的问题,并且在不需要evernote\u timestamp\u基变量的情况下得出了解决方案。谢谢@Seth。