我试图用存储在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