【发布时间】:2014-11-10 01:18:18
【问题描述】:
我有一个服务器时区为 BST(英国夏令时)的应用程序。创建Date 时,会遵守时区,因为当Date 对象转换为Time 对象时,时区显示为BST(或+01:00)(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 bug 还是故意行为?
irb 中也出现同样的问题。在 ruby-1.9.3-p448、ruby-2.1.0 和 ruby-2.1.2 中测试。
【问题讨论】:
标签: ruby datetime type-conversion