【发布时间】:2012-08-16 21:09:14
【问题描述】:
只是增加了关于时区和 DST 问题的数百万个问题。
我有一个包含单独日期和时间字段的表单,我将它们组合起来创建一个 DateTime 像这样
start_time = DateTime.parse("#{parse_date(form_date)} #{form_start_time} #{Time.zone}")
如果我在 2012 年 8 月 21 日和 15:00 填写表单,那么这些就是我在重新加载表单时看到的值。如果我再查看模型中的 start_time 属性,它会正确设置为 Tue, 21 Aug 2012 15:00:00 EST +10:00。
如果我在夏令时开始后使用今年晚些时候的日期(我在澳大利亚),则会出现问题。如果我使用 2012 年 12 月 21 日和 15:00,然后检查 start_time 我看到 Fri, 21 Dec 2012 16:00:00 EST +11:00。
我对问题的解释是日期保存在我当前的时区 (+10:00) 中,因为这是我告诉 DateTime.parse 要做的事情。但是,当返回该值时,Rails 会查看日期并说“嘿,现在是 12 月的夏令时”并返回 +11:00 时区的时间。
如果 DST 生效,我想要做的是告诉 DateTime.parse 将时间保存在 +11:00 时区。显然将 Time.zone 传递到我的字符串中并不能实现这一点。有没有一种简单的方法可以做到这一点?我可以看到使用 Time#dst 的方法吗?但我怀疑这会创建一些非常难看的复杂代码。我认为可能有一种我缺少的内置方式。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 timezone