我从用户那里收集交付日期和时间的数据。
我想将时间和日期转换为用户时区的时间,然后将其保存到数据库中。
我在更新时执行以下操作:
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
不确定它是否正确,但它的功能就像魅力一样。