只是增加了关于时区和 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 的方法吗?但我怀疑这会创建一些非常难看的复杂代码。我认为可能有一种我缺少的内置方式。