datetime属性不随时区更新

时间:2011-08-16 03:29:00

标签: ruby-on-rails ruby ruby-on-rails-3 timezone

我从用户那里收集交付日期和时间的数据。

我想将时间和日期转换为用户时区的时间,然后将其保存到数据库中。

我在更新时执行以下操作:

Model.rb

before_update :convert_to_timezone

def convert_to_timezone
  #convert the time to UTC time
  Time.zone = self.time_zone #set the time zone to that of the user
  self.deliver_on = Time.zone.parse(self.deliver_on.to_s) #get the correct time for this time zone
  Time.zone = Rails.configuration.time_zone #set the time zone back to the default timezone
end

当我查看数据库时,我希望看到时间转换为我的申请时间和日期。

实施例

时间:'6:00' 时区:'夏威夷' 日期:2011年8月16日

在convert_to_timezone之后

   self.deliver_on = 2011-08-15 22:00:00 -1000

这正是夏威夷在国际日期行的另一边所需要的,所以日期也是正确的。

问题是当我查看数据库时没有保存。

如何将其保存到数据库? 的更新

我明白了。 来自表单的时间已经标记为UTC,因此当我尝试将时间设置为用户在表单上选择的时区的UTC代码时,它实际上将时间转换为该区域中的时间。

所以我做了以下事情:

def convert_to_timezone
  Time.zone = self.time_zone
  local_time = Time.zone.parse(self.deliver_on.to_s.chomp('UTC'))
  self.deliver_on =  local_time.in_time_zone(Rails.configuration.time_zone)
  Time.zone = Rails.configuration.time_zone
end

不确定它是否正确,但它的功能就像魅力一样。

0 个答案:

没有答案