2012-08-05 224 views
3

我正在通過evernote gem for rails上的ruby訪問Evernote API,並且將對象(筆記本,標籤,便籤等)存儲在Postgresql數據庫中。如何將Evernote API時間戳轉換爲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數據類型來存儲這些值?

在此先感謝您的幫助。

回答

5

要在Ruby中做到這一點,使用Time.at.由於Evernote時間戳以毫秒爲單位,Ruby/Unix時間戳以秒爲單位,因此需要除以1000。

createdNote = noteStore.createNote(authToken, note) 
createTime = Time.at(createdNote.created/1000); 
puts "Note was created at #{createTime}" 
+0

這更接近地回答了我的問題,並且在不需要evernote_timestamp_base變量的情況下獲得瞭解決方案。謝謝@Seth。 – s2t2 2012-08-07 05:39:07

5

在postgresql中,您可以使用timestamp [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) 
+0

感謝您幫助我認識到我可以將此值作爲一個數字(除以1000),而不是文本(我必須解析)。這使得解決方案更容易一些。 – s2t2 2012-08-05 07:43:30

相關問題