我的应用程序的服务器时区是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。