在Rails中保留时区



如果我有一个来自客户端的形式为"Wed, 22 Jun 2011 09:43:58 +0200"的时间字符串,我希望将其存储为保留时区。这一点很重要,因为重要的不仅仅是绝对UTC时间,还有时区。

Time.zone.parse(t)将时间转换为Time.zone当时使用的任何区域,从而丢失源时区。

我必须从上面的字符串中手动提取时区吗?或者有惯用的方法吗?

DateTime字段只能存储'YYYY-MM-DD HH:MM:SS'(MySQL),而不能存储时区信息。

您应该将日期时间存储在UTC中,并将时区存储在不同的字段中,最好是指定与UTC的偏移量(以分钟为单位)的整数。

你可以这样提取偏移:

ruby-1.9.2-p180:001:0>> require 'active_support/all' # included by Rails by default
# => true
ruby-1.9.2-p180:002:0>> dt = DateTime.parse "Wed, 22 Jun 2011 09:43:58 +0200"
# => Wed, 22 Jun 2011 09:43:58 +0200
ruby-1.9.2-p180:003:0>> dt.utc_offset
# => 7200
ruby-1.9.2-p180:004:0>> dt.utc
# => Wed, 22 Jun 2011 07:43:58 +0000

编辑:

往返于

ruby-1.9.2-p180 :039 > u.utc.new_offset(u.offset)
=> Wed, 22 Jun 2011 09:43:58 +0500 
ruby-1.9.2-p180 :040 > u
=> Wed, 22 Jun 2011 09:43:58 +0500 

我认为您正在寻找以下解决方案:

在应用程序控制器中:

before_filter :get_tz
def get_tz
  @tz = current_user.time_zone
end
def use_tz
  Time.use_zone @tz do
    yield
  end
end

在一个控制器中,在开始时添加绕过过滤器

around_filter :use_tz

相关内容

  • 没有找到相关文章

最新更新