我試圖用存儲在Rails中精確到毫秒的時間標記,但價值被擡高了,當我取回從數據庫中記錄:存儲時間毫秒的Rails
record.time_stamp = Time.utc(2017,1,1,1,1,1.35)
入住時間保存前:
record.time_stamp.strftime('%H:%M:%S.%L')
=> "01:01:01.350"
record.time_stamp.usec
=> 350000
record.time_stamp.to_f
=> 1483232461.35
保存和重新加載:
保存後record.save!
record.reload
入住時間:
record.time_stamp.strftime('%H:%M:%S.%L')
=> "01:01:01.006"
record.time_stamp.usec
=> 6108
record.time_stamp.to_f
=> 1483232461.0061078
record.read_attribute_before_type_cast("time_stamp") // Read raw value before type casting
=> "2017-01-01 01:01:01.35"
不知道這裏發生了什麼事。存儲在數據庫中的毫秒值是正確的,類型轉換前的原始值也是如此(參見最後一行),當它重新投入Ruby時間時,它就會被忽略。
注:
- 我意識到Ruby Time is precise to nanoseconds, while the DB is only precise to microseconds - 但我只是想挽回毫秒,所以這不應該是一個因素。
- 這不是一個時區問題。
(規格:的Rails/ActiveRecord的4.2.6,紅寶石2.3.0,9.5.0的Postgres,OSX)
UPDATE:
我只是想再現這個問題一個與我目前的應用程序完全相同的rails/ruby/postgres版本的新的rails應用程序,並且無法做到這一點!而且,由於其他人也無法複製,這意味着這是我的應用程序明確具體的東西,我需要進一步挖掘以試圖隔離造成這種情況的原因......當我獲得更多信息時會更新。
這可能是一個時區的事情。您是否檢查了與UTC時間戳相對的值?你可能會在'UTC'節省時間並檢索'GMT'? – Cyzanfar
@Cyzanfar - 查看更新,UTC中的相同內容。 (無論如何,時區差異不會影響秒/毫秒吧?) – Yarin
正確它不應該影響它......讓我對我的結局做一些研究。讓我知道是否以及何時找到解決方案。這是一個有趣的問題。 – Cyzanfar