private void updateDataAccordingProlepticSetting() throws Exception {
    for (int i = 0; i < nanos.length; i++) {
      if (time[i] >= CalendarUtils.SWITCHOVER_MILLIS) { // no need for conversion
        continue;
      }
      asScratchTimestamp(i);
      long offset = 0;

      long millis = usingProlepticCalendar ? CalendarUtils.convertTimeToProleptic(scratchTimestamp.getTime())
          : CalendarUtils.convertTimeToHybrid(scratchTimestamp.getTime());

      Timestamp newTimeStamp = Timestamp.from(Instant.ofEpochMilli(millis));

      scratchTimestamp.setTime(newTimeStamp.getTime() + offset);
      scratchTimestamp.setNanos(nanos[i]);

      setFromScratchTimestamp(i);
    }
  }
Change the calendar to or from proleptic. If the new and old values of the flag are the
same, nothing is done.
useProleptic - set the flag for the proleptic calendar
updateData - change the data to match the new value of the flag.
storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/TimestampColumnVector.java