2012-01-01T01:02:03.456
ActiveRecordを使用してPostgresデータベースTIMESTAMPに保存しているような文字列があります。
残念ながら、Rubyはミリ秒を切り落とすようです。
ruby-1.9.3-rc1 :078 > '2012-12-31T01:01:01.232323+3'.to_datetime
=> Mon, 31 Dec 2012 01:01:01 +0300
Postgrsはマイクロ秒の解像度をサポートしています。それに応じてタイムスタンプを保存するにはどうすればよいですか?少なくともミリ秒の解像度が必要です。
(PSはい、postgresでミリ秒の整数列をハックすることができます。そのようなものはActiveRecordの目的全体を打ち負かします。)
更新:
非常に役立つ応答は、RubyDateTime
がミリ秒単位で切り刻まれていないことを示していました。使用する#to_f
と表示されます。しかし、次のことを行います。
m.happened_at = '2012-01-01T00:00:00.32323'.to_datetime
m.save!
m.reload
m.happened_at.to_f
ミリ秒を削除します。
さて、興味深いのはcreated_at
、RailsとPostgresの両方でミリ秒が表示されることです。しかし、他のタイムスタンプフィールド(happened_at
上記のような)はそうではありません。(おそらく、RailsはDateTimeを渡すのではなく、のNOW()
関数を使用します)。created_at
これが私の最終的な質問につながります:
タイムスタンプフィールドでミリ秒の解像度を維持するためにActiveRecordを取得するにはどうすればよいですか?