我查看了一些 StackOverflow 问题,但似乎没有一个能够解决这个问题。
例如,我的时间是:
2012-04-19 08:42:00 +0200
这是通过表单输入的内容。但是所有内容都是相对于它所在的时区显示的。因此,由于计算机以 UTC 工作,因此保存后的时间为:
Wed, 18 Apr 2012 23:42:00 PDT -07:00
我如何保持相同的时间,但只是改变区域?
我查看了一些 StackOverflow 问题,但似乎没有一个能够解决这个问题。
例如,我的时间是:
2012-04-19 08:42:00 +0200
这是通过表单输入的内容。但是所有内容都是相对于它所在的时区显示的。因此,由于计算机以 UTC 工作,因此保存后的时间为:
Wed, 18 Apr 2012 23:42:00 PDT -07:00
我如何保持相同的时间,但只是改变区域?
我认为Time.use_zone方法可能会对您有所帮助。在我正在使用的应用程序中,我们希望根据当前用户的时区来解释时间。我们的User
类被赋予了一个time_zone
属性,它只是一个有效的ActiveSupport::TimeZone
字符串,我们创建了一个around_filter
如下:
class ApplicationController < ActionController::Base
around_filter :activate_user_time_zone
def activate_user_time_zone
return yield unless current_user # nothing to do if no user logged in
return yield unless current_user.time_zone && ActiveSupport::TimeZone[current_user.time_zone] # nothing to do if no user zone or zone is incorrect
Time.use_zone(ActiveSupport::TimeZone[current_user.time_zone]) do
yield
end
end
end
基本上,这将执行控制器操作中的代码,就好像它在当前用户的时区中一样。