1

我们在时区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)

对此有什么解释吗?

4

1 回答 1

1

那是正常行为,DST 更改发生在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
于 2013-04-10T09:48:59.060 回答