class Timecop::TimeStackItem

def parse_time(*args)

def parse_time(*args)
  arg = args.shift
  if arg.is_a?(Time)
    arg
  elsif Object.const_defined?(:DateTime) && arg.is_a?(DateTime)
    time_klass.at(arg.to_time.to_f).getlocal
  elsif Object.const_defined?(:Date) && arg.is_a?(Date)
    time_klass.local(arg.year, arg.month, arg.day, 0, 0, 0)
  elsif args.empty? && (arg.kind_of?(Integer) || arg.kind_of?(Float))
    time_klass.now + arg
  elsif arg.nil?
    time_klass.now
  else
    if arg.is_a?(String) && Time.respond_to?(:parse)
      time_klass.parse(arg)
    else
      # we'll just assume it's a list of y/m/d/h/m/s
      year   = arg        || 2000
      month  = args.shift || 1
      day    = args.shift || 1
      hour   = args.shift || 0
      minute = args.shift || 0
      second = args.shift || 0
      time_klass.local(year, month, day, hour, minute, second)
    end
  end
end