ruby - 日期、日期时间和时区

标签 ruby datetime type-conversion

我有一个服务器时区为 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 中测试。

最佳答案

至少这看起来像是预期的行为,因为这已被注意到 herehere ,作者船叶忠义在讨论中对它有一些评论。虽然,我(还没有通读,并且)不太遵循逻辑(以及询问它的人,以及许多其他人)。不知何故,Tadayoshi Funaba 似乎变得很沮丧,而且(可能是因为这个,故意的)评论大部分是日语,尽管问题是用英语写的。

关于ruby - 日期、日期时间和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866253/

相关文章:

java.lang.Object 到 arraylist

css - Mechanize page.search 不适用于 link.click 方法

Ruby regexp - 如何验证 8 位数字?

c# - 使用 C#/Mono 更改 Ubuntu 上的当前时区

c++ - 在 C++ 中从 std::string 转换为 char *

python - MATLAB 到 Python 转换 : vectors, 数组,索引元素

ruby-on-rails - Rails 中的作用域和作用域

ruby - Ruby 中 DateTime.parse 中的 PST/PDT

mysql - 如何在 MySQL 中获取当前日期和时间?

Python速度测试 - 时差 - 毫秒