Ruby on rails 如何将Time.parse(“1984年10月4日”)转换为ActiveSupport::TimeWithZone?
我正在使用Chronic解析时间,它返回此错误: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
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
,该补丁实际上是一条路要走。我尝试了另一个答案,但在我把它标对后,它失败了。谢谢事实上,这不太管用。上面的补丁似乎挽救了这一天。非常感谢巴朱