【问题标题】:Rails 2.3.5 parses date inconsistentlyRails 2.3.5 解析日期不一致
【发布时间】:2011-04-08 22:46:22
【问题描述】:

首先,由于 Redmine,我使用的是旧版 Rails。

我正在尝试编写一个脚本来将 Redmine 的数据库转储时间戳更新到特定时区,因此我需要 ruby​​ 来解析它们并更改时区,假设 rails 可以处理 dst 边界。

尽管如此,我发现 Time.parse 的工作方式存在不一致(或被误解)。

这是我在 Rails 2.3.5 原始应用程序上执行的脚本:

impulse@ImpulseServer:~/pgtz_converter$ script/console
Loading development environment (Rails 2.3.5)
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0200 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-20 00:00:00')
=> Sun Feb 20 00:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> exit

这是上面发生的事情:

服务器本地日期时区为 BRT。

impulse@ImpulseServer:~/pgtz_converter$ date
Fri Apr  8 19:17:34 BRT 2011

首先我检查 Time.zone(UTC),然后尝试解析 DST 日期。 输出很好,DST 开启(我假设 Time.zone = UTC 意味着 Ruby 检查了服务器区域配置并使用它)。 然后我尝试另一个日期,其中 DST 不再有效(DST 于 2011 年 2 月 20 日 00:00 结束)。 此日期已正确解析 (GMT-3)。

现在问题开始了。

我再次尝试解析旧的 DST 日期,结果错误!它不是 DST 日期!

我想也许解析改变了 Time.zone,但粘贴时它一直是 UTC。

这是什么原因造成的?

感谢您的阅读。

尼洛

【问题讨论】:

    标签: ruby-on-rails timezone dst


    【解决方案1】:

    您可能希望更改为在 rails 中使用 ActiveSupport::TimeWithZone 类。

    【讨论】:

    • 谢谢,这些更改成功了:Time.zone = 'Brasilia'Time.zone.parse('A DATE').utc \o/
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多