在Rails

时间:2015-05-19 18:42:58

标签: ruby-on-rails datetime

我有一个数据库表,其中包含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点?

1 个答案:

答案 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