0

我查看了一些 StackOverflow 问题,但似乎没有一个能够解决这个问题。

例如,我的时间是:

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

这是通过表单输入的内容。但是所有内容都是相对于它所在的时区显示的。因此,由于计算机以 UTC 工作,因此保存后的时间为:

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

我如何保持相同的时间,但只是改变区域?

4

2 回答 2

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

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

于 2012-04-19T14:35:46.693 回答
1

我有同样的要求。请检查这个这个链接

或者

"2012-04-19 08:42:00 +0200".to_time.strftime("%c").to_datetime
于 2012-04-19T14:34:16.903 回答