data_mapper: 无法保存时间对象

data_mapper: Can't save Time object

我正在尝试保留一个具有时间类型字段的对象。在创建时,我尝试将 sleep_value 设置为有效的 Time 对象,但保存似乎无声地失败(即使 raise_on_save_failure 设置为 true)。

如果我尝试通过 Sleep.allSleep.get(1) 搜索对象,我收到错误消息 argument out of range

我可以传递给它以使其持久存在的唯一值是 Time.now()。如果我执行 Sleep.all,则返回具有 sleep_time => Time.now 的对象。

gems:    
data_mapper (1.2.0)   
sqlite3 (1.3.10)


require 'sqlite3'
require 'data_mapper'

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/test.db")

DataMapper::Model.raise_on_save_failure = true

class Sleep

    include DataMapper::Resource
    property :id,           Serial
    property :sleep_time,   Time

end

DataMapper.finalize.auto_migrate!

Sleep.create(:sleep_time => Time.new(2015, 10, 1))

Sleep.all

更新:我做了更多的试验和错误,发现以下值与时间字段兼容(将名称从 sleep_time 更改为 st)

Sleep.create(:st => (Time.now - 1))
Sleep.create(:st => Time.at((Time.now - Time.at(1000))))

并且以下值不会保存(不会抛出错误但不会保留记录)

Sleep.create(:st => Time.new(2015, 10, 1, 2, 2, 2, "+02:00"))
Sleep.create(:st => Time.new(2002))
Sleep.create(:st => Time.new((Time.now - Time.new(2002)))) #out of range
Sleep.create(:st => Time.at(2)) #out of range

我利用了我可以与 Time.now() 一起使用的事实并制作了这个辅助方法。我调用它来保存我的时间属性。

def self.convert_to_dm_friendly_time(target_time)

today = Time.now
return today + target_time.to_i - today.to_i #basically starting the object from today and then taking today out.

end

该死,这是一个丑陋的解决方案。当然有更简单的方法吗?