From 7ab6f6c9b291594780f1db6b31aefcfc6b1a5c1a Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Sun, 4 Jul 2021 09:46:59 +0300 Subject: [PATCH] Change Duration.INFINITE.toIsoString representation --- .../stdlib/samples/test/samples/time/durations.kt | 2 +- libraries/stdlib/src/kotlin/time/Duration.kt | 10 ++++++++-- libraries/stdlib/test/time/DurationTest.kt | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libraries/stdlib/samples/test/samples/time/durations.kt b/libraries/stdlib/samples/test/samples/time/durations.kt index b8fba255729..532b320c28a 100644 --- a/libraries/stdlib/samples/test/samples/time/durations.kt +++ b/libraries/stdlib/samples/test/samples/time/durations.kt @@ -20,7 +20,7 @@ class Durations { assertPrints(Duration.seconds(86420).toIsoString(), "PT24H0M20S") assertPrints(Duration.days(2).toIsoString(), "PT48H") assertPrints(Duration.ZERO.toIsoString(), "PT0S") - assertPrints(Duration.INFINITE.toIsoString(), "PT2147483647H") + assertPrints(Duration.INFINITE.toIsoString(), "PT9999999999999H") } @Sample diff --git a/libraries/stdlib/src/kotlin/time/Duration.kt b/libraries/stdlib/src/kotlin/time/Duration.kt index 687a23268a3..634b1d0256f 100644 --- a/libraries/stdlib/src/kotlin/time/Duration.kt +++ b/libraries/stdlib/src/kotlin/time/Duration.kt @@ -764,8 +764,14 @@ public value class Duration internal constructor(private val rawValue: Long) : C public fun toIsoString(): String = buildString { if (isNegative()) append('-') append("PT") - absoluteValue.toComponents { hours, minutes, seconds, nanoseconds -> - val hasHours = hours != 0 + val absoluteValue = this@Duration.absoluteValue + absoluteValue.toComponents { _, minutes, seconds, nanoseconds -> + var hours = absoluteValue.inWholeHours + if (isInfinite()) { + // use large enough value instead of Long.MAX_VALUE + hours = 9_999_999_999_999 + } + val hasHours = hours != 0L val hasSeconds = seconds != 0 || nanoseconds != 0 val hasMinutes = minutes != 0 || (hasSeconds && hasHours) if (hasHours) { diff --git a/libraries/stdlib/test/time/DurationTest.kt b/libraries/stdlib/test/time/DurationTest.kt index de7f422bc69..4b9e8744db0 100644 --- a/libraries/stdlib/test/time/DurationTest.kt +++ b/libraries/stdlib/test/time/DurationTest.kt @@ -485,7 +485,7 @@ class DurationTest { assertEquals("-PT24H15M", (-Duration.days(1) - Duration.minutes(15)).toIsoString()) // infinite - assertEquals("PT2147483647H", Duration.INFINITE.toIsoString()) + assertEquals("PT9999999999999H", Duration.INFINITE.toIsoString()) } @Test