我有一个服务器时区为 BST(英国夏令时)的应用程序。创建 Date
时,会考虑时区,因为当 Date
对象时时区显示为 BST(或 +01:00
)转换为Time
对象(in_time_zone
是rails方法,但只用在问题中突出问题。):
Date.today.to_time #=> 2014-09-16 00:00:00 +0100
Date.today.to_time.in_time_zone #=> Tue, 16 Sep 2014 00:00:00 BST +01:00
但是,DateTime
不考虑时区:
Date.today.to_datetime #=> Tue, 16 Sep 2014 00:00:00 +0000
这将被服务器翻译成凌晨 1 点:
Date.today.to_datetime.in_time_zone #=> Tue, 16 Sep 2014 01:00:00 BST +01:00
目前我执行以下操作以在 datetime 对象上强制使用正确的时区:
Date.today.to_time.to_datetime #=> Tue, 16 Sep 2014 00:00:00 +0100
但这感觉很不对劲,所以我在代码中添加了注释,解释了为什么要这样写。
为什么转换为 DateTime
的行为与转换为 Time
的行为不同?它应该被视为 ruby 错误还是故意行为?
同样的问题出现在 irb 中。在 ruby-1.9.3-p448、ruby-2.1.0 和 ruby-2.1.2 中测试。
最佳答案
至少这看起来像是预期的行为,因为这已被注意到 here和 here ,作者船叶忠义在讨论中对它有一些评论。虽然,我(还没有通读,并且)不太遵循逻辑(以及询问它的人,以及许多其他人)。不知何故,Tadayoshi Funaba 似乎变得很沮丧,而且(可能是因为这个,故意的)评论大部分是日语,尽管问题是用英语写的。
关于ruby - 日期、日期时间和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866253/