code: @Override
      public TimeZoneTransition getNextTransition(long base, boolean inclusive) {
          initTransitionRules();
  
          if (finalZone != null) {
              if (inclusive && base == firstFinalTZTransition.getTime()) {
                  return firstFinalTZTransition;
              } else if (base >= firstFinalTZTransition.getTime()) {
                  if (finalZone.useDaylightTime()) {
                      //return finalZone.getNextTransition(base, inclusive);
                      return finalZoneWithStartYear.getNextTransition(base, inclusive);
                  } else {
                      // No more transitions
                      return null;
                  }
              }
          }
          if (historicRules != null) {
              // Find a historical transition
              int ttidx = transitionCount - 1;
              for (; ttidx >= firstTZTransitionIdx; ttidx--) {
                  long t = transitionTimes64[ttidx] * Grego.MILLIS_PER_SECOND;
                  if (base > t || (!inclusive && base == t)) {
                      break;
                  }
              }
              if (ttidx == transitionCount - 1)  {
                  return firstFinalTZTransition;
              } else if (ttidx < firstTZTransitionIdx) {
                  return firstTZTransition;
              } else {
                  // Create a TimeZoneTransition
                  TimeZoneRule to = historicRules[getInt(typeMapData[ttidx + 1])];
                  TimeZoneRule from = historicRules[getInt(typeMapData[ttidx])];
                  long startTime = transitionTimes64[ttidx+1] * Grego.MILLIS_PER_SECOND;
  
                  // The transitions loaded from zoneinfo.res may contain non-transition data
                  if (from.getName().equals(to.getName()) && from.getRawOffset() == to.getRawOffset()
                          && from.getDSTSavings() == to.getDSTSavings()) {
                      return getNextTransition(startTime, false);
                  }
  
                  return new TimeZoneTransition(startTime, from, to);
              }
          }
          return null;
      }
docs: /* (non-Javadoc)
  @see android.icu.util.BasicTimeZone#getNextTransition(long, boolean)