private static @NotNull @Nls String formatDurationPaddedMeasure(long duration, @NotNull MeasureUnit durationTimeUnit) {
    long millisIn = 1;
    int i = 0;
    while (TIME_UNITS[i] != durationTimeUnit) {
      i++;
      // Will never be called in a practical case, since the converter produces only those time units that are already in the array
      // However, it can be called theoretically, since the converter can be changed
      if (i == TIME_UNITS.length) throw new IllegalArgumentException("Duration time unit doesn't exists in all time units");
    }
    i++;
    int startPosition = i;
    for (; i < TIME_MULTIPLIERS.length; i++) {
      long multiplier = TIME_MULTIPLIERS[i];
      millisIn *= multiplier;
      if (duration < millisIn) {
        break;
      }
    }
    long d = duration;
    LocalizedNumberFormatter formatter = getFormats().narrowNumber;
    List<FormattedNumber> result = new ArrayList<>();
    for (i -= 1; i >= startPosition - 1; i--) {
      long multiplier = i == TIME_MULTIPLIERS.length - 1 ? 1 : TIME_MULTIPLIERS[i + 1];
      millisIn /= multiplier;
      long value = d / millisIn;
      d = d % millisIn;
      IntegerWidth style = IntegerWidth.zeroFillTo(result.isEmpty() ? 1 : PADDED_FORMAT[i]); // do not pad the most significant unit
      LocalizedNumberFormatter unitFormatter = formatter.unit(TIME_UNITS[i]).integerWidth(style);
      result.add(unitFormatter.format(value));
    }
    return ListFormatter.getInstance(Locale.getDefault(), ListFormatter.Type.UNITS, ListFormatter.Width.NARROW).format(result);
  }
private static @NotNull @Nls String formatDurationPaddedMeasure(long duration, @NotNull MeasureUnit durationTimeUnit)