Ruby on rails 如何将Time.parse(“1984年10月4日”)转换为ActiveSupport::TimeWithZone?

Ruby on rails 如何将Time.parse(“1984年10月4日”)转换为ActiveSupport::TimeWithZone?,ruby-on-rails,ruby,timezone,activesupport,Ruby On Rails,Ruby,Timezone,Activesupport,我正在使用Chronic解析时间,它返回此错误: ArgumentError in EventsController#create comparison of Date with ActiveSupport::TimeWithZone failed 这是因为由于Rails2.1,数据库和Ruby位于不同的时区 如何将我的语句转换为工作状态 def set_dates unless self.natural_date.blank? || Chronic.parse(self.natura

我正在使用Chronic解析时间,它返回此错误:

ArgumentError in EventsController#create 

comparison of Date with ActiveSupport::TimeWithZone failed
这是因为由于Rails2.1,数据库和Ruby位于不同的时区

如何将我的语句转换为工作状态

def set_dates
  unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_date)
      self.date = nil
      self.time = Chronic.parse(self.natural_date)
    else
      self.date = Chronic.parse(self.natural_date).to_date
      self.time = nil
    end
  end

Time.zone
有一个
parse
方法,该方法还返回一个
ActiveSupport::TimeWithZone

>> Time.zone.parse "October 4 1984"
=> Thu, 04 Oct 1984 00:00:00 EDT -04:00
让它玩慢性病,也许能帮上忙?例如,如果要将
parse_with_chronic
方法修补到
ActiveSupport::TimeZone
,则可以重写方法:

def set_dates
  unless self.natural_date.blank? || Time.zone.parse_with_chronic(self.natural_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_date)
      self.date = nil
      self.time = Time.zone.parse_with_chronic(self.natural_date)
    else
      self.date = Time.zone.parse_with_chronic(self.natural_date).to_date
      self.time = nil
    end
  end
end
看这里:有一个构造函数,它接受utc中的正常时间对象和时区。因此,给定时间,您可以尝试以下方法:

ActiveSupport::TimeWithZone.new(Chronic.parse(self.natural_date).utc, Time.zone)

是的,但它并不能真正帮助我弄清楚如何使
Chronic.parse(self.natural_date).to_date
成为
ActiveSupport::TimeWithZone
,该补丁实际上是一条路要走。我尝试了另一个答案,但在我把它标对后,它失败了。谢谢事实上,这不太管用。上面的补丁似乎挽救了这一天。非常感谢巴朱