【发布时间】:2013-05-24 23:12:06
【问题描述】:
我在数据库中有一条记录foo,它具有:start_time 和:timezone 属性。
:start_time 是 UTC 时间 - 例如,2001-01-01 14:20:00。
:timezone 是一个字符串 - 例如 America/New_York。
我想创建一个新的时间对象,其值为:start_time,但其时区由:timezone 指定。我不想加载:start_time 然后转换为:timezone,因为Rails 会很聪明地更新UTC 的时间以与那个时区保持一致。
目前,
t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t.in_time_zone("America/New_York")
=> Sat, 01 Jan 2000 09:20:00 EST -05:00
相反,我想看看
=> Sat, 01 Jan 2000 14:20:00 EST -05:00
即。我想做:
t
=> 2000-01-01 14:20:00 UTC
t.zone = "America/New_York"
=> "America/New_York"
t
=> 2000-01-01 14:20:00 EST
【问题讨论】:
-
我认为您没有正确使用时区。如果您将其作为 UTC 从本地保存到您的数据库中,那么通过其本地时间解析它并通过其相对 utc 保存它有什么问题?
-
是的...我认为为了最好地获得帮助,您可能需要解释为什么您需要这样做?为什么一开始就将错误的时间存储到数据库中?
-
@MrYoshiji 同意了。对我来说听起来像是 YAGNI 或过早的优化。
-
如果这些文档有帮助,我们就不需要 StackOverflow :-) 有一个例子,它没有显示任何设置 - 典型。我还需要这样做以强制进行 Apples-To-Apples 比较,该比较不会在夏令时开始或结束时中断。
标签: ruby-on-rails ruby datetime time timezone