Skip to content

Commit 889c524

Browse files
committed
Code samples for Kotlin Durations
1 parent 4ce37bf commit 889c524

File tree

1 file changed

+105
-0
lines changed
  • core-kotlin-modules/core-kotlin-date-time/src/test/kotlin/com/baeldung/duration

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.baeldung.duration
2+
3+
import org.junit.jupiter.api.Test
4+
import kotlin.test.assertEquals
5+
import kotlin.test.assertFalse
6+
import kotlin.test.assertTrue
7+
import kotlin.time.Duration
8+
import kotlin.time.Duration.Companion.days
9+
import kotlin.time.Duration.Companion.hours
10+
import kotlin.time.Duration.Companion.microseconds
11+
import kotlin.time.Duration.Companion.milliseconds
12+
import kotlin.time.Duration.Companion.minutes
13+
import kotlin.time.Duration.Companion.nanoseconds
14+
import kotlin.time.Duration.Companion.seconds
15+
import kotlin.time.DurationUnit
16+
import kotlin.time.toDuration
17+
import kotlin.time.toJavaDuration
18+
import java.time.Duration as JavaDuration
19+
20+
class DurationUnitTest {
21+
@Test
22+
fun `given numeric values, create duration instance using companion`() {
23+
val tenMinutes = 10.minutes
24+
assertEquals(10L, tenMinutes.inWholeMinutes)
25+
assertEquals(600L, tenMinutes.inWholeSeconds)
26+
val tenSeconds = 10.seconds
27+
assertEquals(10L, tenSeconds.inWholeSeconds)
28+
val zero = Duration.ZERO
29+
assertEquals(0L, zero.inWholeMicroseconds)
30+
}
31+
32+
@Test
33+
fun `given numeric values, create duration instance using toDuration and unit`() {
34+
val tenMinutes = 10.toDuration(DurationUnit.MINUTES)
35+
assertEquals(10L, tenMinutes.inWholeMinutes)
36+
assertEquals(600L, tenMinutes.inWholeSeconds)
37+
val tenSeconds = 10.toDuration(DurationUnit.SECONDS)
38+
assertEquals(10L, tenSeconds.inWholeSeconds)
39+
val zero = Duration.ZERO
40+
assertEquals(0L, zero.inWholeMicroseconds)
41+
val infinite = Duration.INFINITE
42+
assertEquals(true, infinite.isInfinite())
43+
}
44+
45+
@Test
46+
fun `given ISO8601 string values, create duration instance`() {
47+
val tenMinDuration = Duration.parseIsoString("PT10M")
48+
assertEquals(600L, tenMinDuration.inWholeSeconds)
49+
assertEquals("PT10M", tenMinDuration.toIsoString())
50+
val tenDays = Duration.parseIsoString("P10D")
51+
assertEquals(10L, tenDays.inWholeDays)
52+
val tenDaysAndOneHour = Duration.parseIsoString("P10DT1H")
53+
assertEquals(241L, tenDaysAndOneHour.inWholeHours)
54+
assertEquals("PT241H", tenDaysAndOneHour.toIsoString())
55+
val tenDaysWithAllUnits = Duration.parseIsoString("P10DT1H5M7S")
56+
assertEquals(867907L, tenDaysWithAllUnits.inWholeSeconds)
57+
}
58+
59+
@Test
60+
fun `given a duration, convert into java duration`() {
61+
val sixHundredSeconds = 600.seconds
62+
val javaDuration: java.time.Duration = sixHundredSeconds.toJavaDuration()
63+
val javaDurationInst = JavaDuration.ofSeconds(600)
64+
assertEquals(javaDuration, javaDurationInst)
65+
}
66+
67+
@Test
68+
fun `given two different durations, combine them into single duration`() {
69+
val tenMinutes = 10.minutes
70+
val fiveHours = 5.hours
71+
val fiveHoursPlusTenMin = tenMinutes + fiveHours
72+
assertEquals(310L, fiveHoursPlusTenMin.inWholeMinutes)
73+
val fiveHoursMinusTenMin = fiveHours - tenMinutes
74+
assertEquals(290L, fiveHoursMinusTenMin.inWholeMinutes)
75+
val timesMinutes = tenMinutes.times(3)
76+
assertEquals(30L, timesMinutes.inWholeMinutes)
77+
val sixSecs = tenMinutes.div(100)
78+
assertEquals(6, sixSecs.inWholeSeconds)
79+
}
80+
81+
@Test
82+
fun `given two different durations, check if they are equal`() {
83+
val tenMinutes = 10.minutes
84+
val sixHundredSeconds = 600.seconds
85+
assert(tenMinutes == sixHundredSeconds)
86+
}
87+
88+
@Test
89+
fun `given two different durations, compare them`() {
90+
val tenMinutes = 10.minutes
91+
val fiveHours = 5.hours
92+
assertTrue { fiveHours > tenMinutes }
93+
assertFalse { fiveHours < tenMinutes }
94+
assertTrue { fiveHours == 300.minutes }
95+
assertTrue { fiveHours.isPositive() }
96+
}
97+
98+
@Test
99+
fun `given a duration, break down into smaller parts`() {
100+
val seventyMinutes = 70.minutes
101+
val asStr = seventyMinutes.toComponents { hrs, min, sec, nanos -> "${hrs}:${min}" }
102+
assertEquals("1:10", asStr)
103+
}
104+
105+
}

0 commit comments

Comments
 (0)