def modify_such_that_is_before(time2)
      fail 'ZTime#modify_such_that_is_before says: trying to modify time that has @firm set' if @firm
      fail 'ZTime#modify_such_that_is_before says: time2 does not have @firm set' unless time2.firm
      # self cannot have @firm set, so all hours will be between 1 and 12
      # time2 is an end time, self could be its current setting, or off by 12 hours

      # self to time2 --> self to time2
      # 12   to 2am   --> 1200 to 0200
      # 12   to 12am  --> 1200 to 0000
      # 1220 to 12am  --> 1220 to 0000
      # 11 to 2am  or 1100 to 0200
      if self > time2
        if hour == 12 && time2.hour == 0
          # do nothing
        else
          hour == 12 ? change_hour_to(0) : change_hour_to(hour + 12)
        end
      elsif self < time2
        if time2.hour >= 12 && ZTime.new(ZTime.format_time(time2.hour - 12, time2.min_str, time2.sec_str)) > self
          # 4 to 5pm  or 0400 to 1700
          change_hour_to(hour + 12)
        else
          # 4 to 1pm  or 0400 to 1300
          # do nothing
        end
      else
        # the times are equal, and self can only be between 0100 and 1200, so move self forward 12 hours, unless hour is 12
        hour == 12 ? change_hour_to(0) : change_hour_to(hour + 12)
      end
      self.firm = true
      self
    end
def modify_such_that_is_before(time2)
      fail 'ZTime#modify_such_that_is_before says: trying to modify time that has @firm set' if @firm
      fail 'ZTime#modify_such_that_is_before says: time2 does not have @firm set' unless time2.firm
      # self cannot have @firm set, so all hours will be between 1 and 12
      # time2 is an end time, self could be its current setting, or off by 12 hours

      # self to time2 --> self to time2
      # 12   to 2am   --> 1200 to 0200
      # 12   to 12am  --> 1200 to 0000
      # 1220 to 12am  --> 1220 to 0000
      # 11 to 2am  or 1100 to 0200
      if self > time2
        if hour == 12 && time2.hour == 0
          # do nothing
        else
          hour == 12 ? change_hour_to(0) : change_hour_to(hour + 12)
        end
      elsif self < time2
        if time2.hour >= 12 && ZTime.new(ZTime.format_time(time2.hour - 12, time2.min_str, time2.sec_str)) > self
          # 4 to 5pm  or 0400 to 1700
          change_hour_to(hour + 12)
        else
          # 4 to 1pm  or 0400 to 1300
          # do nothing
        end
      else
        # the times are equal, and self can only be between 0100 and 1200, so move self forward 12 hours, unless hour is 12
        hour == 12 ? change_hour_to(0) : change_hour_to(hour + 12)
      end
      self.firm = true
      self
    end
this can very easily be cleaned up