3

ruby on rails の evernote gem を介して Evernote API にアクセスし、オブジェクト (ノートブック、タグ、メモなど) を Postgresql データベースに保存しています。

Evernote は次のようなタイムスタンプを返します。

  • 1344141917000
  • 1344141967000
  • 1344138641000

evernote api ドキュメントによると、これは 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 

間違いなく正しくありません。しかし、これらの最後の 3 つのゼロを切り捨てると、正しい日付が得られます。

evernote_timestamp_base + 1344138641
=> 2012-08-05 03:50:41 UTC

ここで何か不足していますか?最後の 3 つのゼロはどうなるのですか? evernote の timstamp 値を解析して切り刻み、1970 ベースに追加する必要がありますか、それとももっと簡単な方法はありますか?

また、これらの値を格納するのに最適な Postgresql データ型は何ですか?

よろしくお願いします。

4

2 に答える 2

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)
于 2012-08-05T06:04:52.177 に答える
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}"
于 2012-08-06T17:56:30.713 に答える