我有一个类似的字符串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 使用了一个NOW()
函数而created_at
不是传入一个 DateTime)。
这导致了我的终极问题:
如何让 ActiveRecord 保留时间戳字段的毫秒分辨率?