日期,日期时间和时区

时间:2014-09-16 10:22:07

标签: ruby datetime type-conversion

我的应用程序的服务器时区是BST(英国夏令时)。创建Date时,会尊重时区,因为当+01:00对象转换为Date对象时,时区显示为BST(或Time}({ {1}}是rails方法,但它仅在问题中用于突出显示问题。):

in_time_zone

但是,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

这将由服务器翻译为凌晨1点:

Date.today.to_datetime   #=> Tue, 16 Sep 2014 00:00:00 +0000

目前我执行以下操作以强制在datetime对象上使用正确的时区:

Date.today.to_datetime.in_time_zone #=> Tue, 16 Sep 2014 01:00:00 BST +01:00

但是这种错误足以在代码中发表评论,解释为什么会这样写。

为什么转换为Date.today.to_time.to_datetime #=> Tue, 16 Sep 2014 00:00:00 +0100 的行为与转换为DateTime的行为不同?它应该被视为红宝石虫还是故意的行为?

同样的问题在irb中发生。测试为ruby-1.9.3-p448,ruby-2.1.0和ruby-2.1.2。

1 个答案:

答案 0 :(得分:1)

至少这看起来像预期的行为,因为已经注意到herehere,作者Tadayoshi Funaba在讨论中对此有一些评论。虽然,我(没有通读,并且)并不完全遵循逻辑(以及要求它的人,以及许多其他人)。不知何故,Tadayoshi Funaba似乎已经感到沮丧,并且(可能是因为这个,故意),评论主要是日语,即使问题是用英语写的。