    # File lib/core/facets/time/shift.rb, line 22
      def shift(*time_units)
        time_hash = Hash===time_units.last ? time_units.pop : {}
        time_units = time_units.flatten
        time_units << :seconds if time_units.size % 2 == 1
        time_hash.each{ |units, number| time_units << number; time_units << units }

        time = self
        time_units.each_slice(2) do |number, units|
          #next time = time.ago(-number, units) if number < 0
          time = (
            case units.to_s.downcase.to_sym
            when :years, :year
              time.set( :year=>(year + number) )
            when :months, :month
              if number > 0
                new_month = ((month + number - 1) % 12) + 1
                y = (number / 12) + (new_month < month ? 1 : 0)
                time.set(:year => (year + y), :month => new_month)
              else
                number = -number
                new_month = ((month - number - 1) % 12) + 1
                y = (number / 12) + (new_month > month ? 1 : 0)
                time.set(:year => (year - y), :month => new_month)
              end
            when :weeks, :week
              time + (number * 604800)
            when :days, :day
              time + (number * 86400)
            when :hours, :hour
              time + (number * 3600)
            when :minutes, :minute, :mins, :min
              time + (number * 60)
            when :seconds, :second, :secs, :sec, nil
              time + number
            else
              raise ArgumentError, "unrecognized time units -- #{units}"
            end
          )
        end
        dst_adjustment(time)
      end