TimeZone的参数无效?

Lea*_*RoR 5 ruby ruby-on-rails ruby-on-rails-3

我正在尝试让我的用户时区成为我的应用程序的当前时区,所以他们互动的一切都将由它完成.我ArgumentError虽然在ApplicationController中遇到了我的方法.

application_controller.rb

before_filter :set_user_time_zone

private

def set_user_time_zone
  if signed_in?
   Time.zone = Time.now.in_time_zone(current_user.time_zone)
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:current_user是一个Devise Helper,我的User模型是一个:time_zone列.

比错误:

invalid argument to TimeZone[]: Mon, 20 Aug 2012 13:16:20 JST +09:00
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.有关如何纠正此问题的任何想法?

谢谢.

UPDATE

class Price
  attr_accessible :date
  def self.today
    where(:date => Date.today)
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我的方法:

def set_user_time_zone
  if signed_in?
    Time.zone = current_user.time_zone
  end
end
Run Code Online (Sandbox Code Playgroud)

我有我的时代的问题是这样的:

 Time.now = US EAST- 2012-08-22 21:17:03 -0400 
 Time.zone = TOKYO - (GMT+09:00) Tokyo 
 Time.zone.now 2012-08-23 10:17:03 +0900
Run Code Online (Sandbox Code Playgroud)

这意味着我的所有Date方法都会消失

Time.now = US EAST- 2012-08-22 21:17:03 -0400

什么时候应该

Time.zone.now 2012-08-23 10:17:03 +0900
Run Code Online (Sandbox Code Playgroud)

怎么才能把它送到后者?

tom*_*mgi 3

Time.now.in_time_zone(current_user.time_zone)返回TimeWithZone类的实例,但Time#zone=希望得到可以转换为TimeZone.

\n\n

假设您将TimeZone标识符存储在:time_zone列中(\xe2\x80\x9c东部时间(美国和加拿大)\xe2\x80\x9d、“夏威夷”等),您可以简单地执行以下操作

\n\n
Time.zone = current_user.time_zone\n
Run Code Online (Sandbox Code Playgroud)\n