【问题标题】:Date, DateTime and the time zone日期、日期时间和时区
【发布时间】: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


    【解决方案1】:

    至少这看起来像是一种预期的行为,因为这已经被 herehere 指出,并且作者 Tadayoshi Funaba 在讨论中有一些关于它的 cmets。虽然,我(还没有通读,并且)不太遵循逻辑(以及询问它的人,以及许多其他人)。不知何故,船场忠义似乎变得沮丧,并且(可能是因为这个,故意的)即使问题是用英文写的,cmets 也大多是日语。

    【讨论】:

    • 第二个链接,评论 #4 - 无价的。
    • 看起来,最后a patch被应用了。
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多