【问题标题】:ActiveRecord does not respect daylight saving time (DST)?ActiveRecord 不遵守夏令时 (DST)?
【发布时间】:2013-04-10 08:34:56
【问题描述】:

我们位于Bern 时区,即+0100。但是由于我们现在是夏令时(我们有夏令时),所以当前的偏移量是+0200。在我的 rails 应用程序中,我使用应用程序控制器中的包装器设置时区,因为我需要基于用户的时区:

around_filter :user_timezone

def user_timezone(&block)
  Time.use_zone(current_timezone, &block)
end

现在奇怪的部分:

Time.zone.now                # 2013-04-10 10:32:56 +0200
                             # (correct offset)

SomeArModel.first.created_at # 2013-03-28 17:49:59 +0100
                             # (incorrect offset, no DST)

对此有什么解释吗?

【问题讨论】:

    标签: ruby-on-rails datetime activerecord timezone dst


    【解决方案1】:

    这是正常行为,夏令时更改发生在Sun Mar 31 01:00:00 UTC 2013

    t = Time.mktime(2013, 03, 31, 1, 15, 0)
    
    6.times do
      t += 900
      u = Time.at(t.to_i).utc
      puts t.to_s  + " " + u.to_s
    end
    

    输出:

    Sun Mar 31 01:30:00 +0100 2013 Sun Mar 31 00:30:00 UTC 2013
    Sun Mar 31 01:45:00 +0100 2013 Sun Mar 31 00:45:00 UTC 2013
    Sun Mar 31 03:00:00 +0200 2013 Sun Mar 31 01:00:00 UTC 2013
    Sun Mar 31 03:15:00 +0200 2013 Sun Mar 31 01:15:00 UTC 2013
    Sun Mar 31 03:30:00 +0200 2013 Sun Mar 31 01:30:00 UTC 2013
    Sun Mar 31 03:45:00 +0200 2013 Sun Mar 31 01:45:00 UTC 2013
    

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2015-06-07
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多