ActiveRecordはデータベースからの完全な精度を維持する必要があります、あなたはそれを正しく見ていません。 strftime
を使用する および%N
分数秒を表示するためのフォーマット。たとえば、psql
これは言う:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
そしてActiveRecordはこれを言います:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
だから、すべてがそこにあります、あなたはそれを見る方法を知る必要があります。
また、ActiveRecordはおそらくActiveSupport::TimeWithZone
を提供することに注意してください DateTime
ではなくオブジェクト オブジェクトがDateTime
すべても保存します:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
connection_adapters/column.rb
をご覧ください ActiveRecordソースで、string_to_time
が何であるかを確認します メソッドは行います。文字列はfallback_string_to_time
に移動します パスとそれは私が言うことができる限り近くの分数秒を保存します。 Railsのソースで見た奇妙なこと、特にデータベース側のことを考えれば、他の場所で何か奇妙なことが起こっている可能性があります。 ActiveRecordが文字列から手を離すように、文字列を手動でオブジェクトに変換してみます。