code: protected static int between(ReadablePartial start, ReadablePartial end, ReadablePeriod zeroInstance) {
          if (start == null || end == null) {
              throw new IllegalArgumentException("ReadablePartial objects must not be null");
          }
          if (start.size() != end.size()) {
              throw new IllegalArgumentException("ReadablePartial objects must have the same set of fields");
          }
          for (int i = 0, isize = start.size(); i < isize; i++) {
              if (start.getFieldType(i) != end.getFieldType(i)) {
                  throw new IllegalArgumentException("ReadablePartial objects must have the same set of fields");
              }
          }
          if (DateTimeUtils.isContiguous(start) == false) {
              throw new IllegalArgumentException("ReadablePartial objects must be contiguous");
          }
          Chronology chrono = DateTimeUtils.getChronology(start.getChronology()).withUTC();
          int[] values = chrono.get(zeroInstance, chrono.set(start, START_1972), chrono.set(end, START_1972));
          return values[0];
      }
docs: Calculates the number of whole units between the two specified partial datetimes.
  <p>
  The two partials must contain the same fields, for example you can specify
  two <code>LocalDate</code> objects.
  
  @param start  the start partial date, validated to not be null
  @param end  the end partial date, validated to not be null
  @param zeroInstance  the zero instance constant, must not be null
  @return the period
  @throws IllegalArgumentException if the partials are null or invalid