我有一个数据库表,其中包含time
类型的列。到目前为止,我一直在拯救一个无区域的"时间,例如4:00pm
。我一直在接受这个字符串"按照"和Rails一直很乐意在数据库中正确保存这个时间字符串。
我现在需要使用时区保存此值。我想以某种方式在EDT中花费4:00pm
时间并将其作为UTC 8:00pm
保存在数据库中。 (我意识到这个下午4点最初被保存为UTC时间下午4点。)
我并不特别关心这个4:00pm
EDT时间如何保存为UTC,尽管我更喜欢利用Rails'本机行为,而不是使我的代码比它需要的更复杂。
知道我的Rails应用程序是API的形式可能很重要,所以我不会使用任何形式的帮助器或类似的东西。我必须简单地接受一个字符串。但是,我可以控制发送该字符串的格式。
所以,总结一下,如何在数据库中将4:00pm EDT
之类的字符串保存为UTC时间晚上8点?
答案 0 :(得分:0)
假设ruby的Time
构造函数正确解释了时区,您只需要在创建的对象上调用utc
方法。像这样:
t = Time.parse("4:00pm EDT")
t.utc
如果在批量分配期间设置了此日期,您可能需要在模型上设置before_save
处理程序,以便将时间设置为UTC。
按OP编辑:
这是我的解决方案最终采取的确切形式:
def earliest_arrival_time=(time)
begin
write_attribute(:earliest_arrival_time, Time.parse(time.to_s).utc)
rescue
write_attribute(:earliest_arrival_time, time)
end
end