toIso method

String toIso()

This method returns a String value from the IsoDuration object in ISO 8601 - Duration (PnYnMnDTnHnMnS format).

If any part is zero then it is omitted. If all parts are zero then it returns PT0S.

Decimal is separated with a dot.

Example:

final dur = IsoDuration(hours: 1, minutes: 2, seconds: 5.5);
dur.toIso(); // 'PT1H2M5.5S'

See also:

Implementation

String toIso() {
  if (isZero) {
    return 'PT0S';
  }

  final strNegative = isNegative ? '-' : '';
  final strBuffer = StringBuffer('${strNegative}P');

  if (years != 0) strBuffer.write('${years.plus().delTrailingZero()}Y');
  if (months != 0) strBuffer.write('${months.plus().delTrailingZero()}M');
  if (weeks != 0) strBuffer.write('${weeks.plus().delTrailingZero()}W');
  if (days != 0) strBuffer.write('${days.plus().delTrailingZero()}D');

  if (<double>[hours, minutes, seconds].any((e) => e != 0)) {
    strBuffer.write('T');

    if (hours != 0) strBuffer.write('${hours.plus().delTrailingZero()}H');
    if (minutes != 0) strBuffer.write('${minutes.plus().delTrailingZero()}M');
    if (seconds != 0) strBuffer.write('${seconds.plus().delTrailingZero()}S');
  }

  return strBuffer.toString();
}