class Rufus::Scheduler::ZoTime

def self.parse(str, opts={})

def self.parse(str, opts={})
  if defined?(::Chronic) && t = ::Chronic.parse(str, opts)
    return ZoTime.new(t, ENV['TZ'])
  end
  begin
    DateTime.parse(str)
  rescue
    raise ArgumentError, "no time information in #{o.inspect}"
  end if RUBY_VERSION < '1.9.0'
  zone = nil
  s =
    str.gsub(/\S+/) { |m|
      if envtzable?(m)
        zone ||= m
        ''
      else
        m
      end
    }
  return nil unless zone.nil? || is_timezone?(zone)
  zt = ZoTime.new(0, zone || ENV['TZ'])
  zt.in_zone { zt.seconds = Time.parse(s).to_f }
  zt.seconds == nil ? nil : zt
end