代码之家  ›  专栏  ›  技术社区  ›  Trip

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

  •  1
  • Trip  · 技术社区  · 14 年前

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

    ArgumentError in EventsController#create 
    
    comparison of Date with ActiveSupport::TimeWithZone failed
    

    如何将我的陈述转换为工作?

    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
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Daniel Vandersluis    14 年前

    Time.zone 有一个 parse ActiveSupport::TimeWithZone :

    >> Time.zone.parse "October 4 1984"
    => Thu, 04 Oct 1984 00:00:00 EDT -04:00
    

    让它和慢性病一起玩,也许 this article 能帮忙吗?例如,如果你要修补 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
    
        2
  •  1
  •   Baju    14 年前

    看这里: TimeWithZone

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