Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Evernote API时间戳转换为Postgresql时间戳_Ruby On Rails_Postgresql_Datetime_Timestamp_Evernote - Fatal编程技术网

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

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,

我通过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,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。