TimeZone的参数无效?

时间:2012-08-20 10:49:50

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

注意:current_user是Devise Helper,我的用户模型是:time_zone列。

比错误:

invalid argument to TimeZone[]: Mon, 20 Aug 2012 13:16:20 JST +09:00

我不知道从哪里开始。关于如何纠正这个问题的任何想法?

感谢。

更新

class Price
  attr_accessible :date
  def self.today
    where(:date => Date.today)
  end
end

如果我的方法有:

def set_user_time_zone
  if signed_in?
    Time.zone = current_user.time_zone
  end
end

我遇到的问题是这样的:

 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

这意味着我的所有Date方法都来自

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

什么时候应该

Time.zone.now 2012-08-23 10:17:03 +0900

我怎样才能把它送到后者?

2 个答案:

答案 0 :(得分:3)

Time#zone=方法只接受这些参数:

  
      
  • Rails TimeZone对象。

  •   
  • Rails TimeZone对象的标识符(例如,“Eastern Time”(美国和美国)。   加拿大)“, - -5。hours)。

  •   
  • TZInfo :: Timezone对象。

  •   
  • TZInfo :: Timezone对象的标识符(例如,   “美国/纽约”)。

  •   

所以你应该从这个列表中传递一些东西

答案 1 :(得分:3)

Time.now.in_time_zone(current_user.time_zone)返回TimeWithZone类的实例,但是 Time#zone=期望获得可以转换为TimeZone的内容。

假设您在TimeZone列(“东部时间(美国和加拿大)”,“夏威夷”等)中存储了:time_zone个标识符,您可以直接执行

Time.zone = current_user.time_zone