我如何保持时间,但改变时区?

时间:2012-04-19 14:13:56

标签: ruby-on-rails time zone

我已经看了几个StackOverflow问题,但似乎没有一个问题可以解决。

我的时间就是:

2012-04-19 08:42:00 +0200

这是通过表格输入的内容。但是所有内容都是相对于它所在的时区显示的。因此,因为计算机在UTC中工作,所以这次保存后就会出现:

Wed, 18 Apr 2012 23:42:00 PDT -07:00

如何保持同一时间,只需更改区域?

2 个答案:

答案 0 :(得分:2)

我认为方法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

基本上,这将执行控制器操作中的代码,就像它在当前用户的时区一样。

答案 1 :(得分:1)

我有同样的要求。请检查thisthis link

可选地

"2012-04-19 08:42:00 +0200".to_time.strftime("%c").to_datetime