1
+ package com.baeldung.kotlinxDateTime
2
+
3
+ import com.baeldung.dates.kotlinxDatetime.KotlinxDateTimeOperations
4
+ import kotlinx.datetime.*
5
+ import kotlinx.datetime.format.DateTimeComponents
6
+ import kotlinx.datetime.format.MonthNames
7
+ import kotlinx.datetime.format.char
8
+ import org.junit.jupiter.api.BeforeEach
9
+ import org.junit.jupiter.api.Test
10
+ import org.junit.jupiter.api.assertDoesNotThrow
11
+ import kotlin.test.assertEquals
12
+ import kotlin.test.assertTrue
13
+
14
+ class KotlinxDateTimeOperationsUnitTest {
15
+
16
+ @Test
17
+ fun `given an Instant convert it to LocalDateTime` () {
18
+ java.util.TimeZone .setDefault(java.util.TimeZone .getTimeZone(" UTC" ));
19
+
20
+ val instant = Instant .fromEpochSeconds(1722427200 )
21
+ assertEquals(" 2024-07-31T12:00:00Z" , instant.toString())
22
+ val localDateTime = instant.toLocalDateTime(TimeZone .currentSystemDefault()) // System is in UTC
23
+ assertEquals(" 2024-07-31T12:00" , localDateTime.toString())
24
+ }
25
+
26
+ @Test
27
+ fun `compare two LocalDateTime from different from the same TimeZone` () {
28
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
29
+ val instant = Instant .fromEpochSeconds(1722427200 )
30
+ val localDateTimeBrazil = kotlinxDateTimeOperations.getLocalDateTimeBrazilTimeZoneFromInstant(instant = instant)
31
+ assertEquals(" 2024-07-31T09:00" , localDateTimeBrazil.toString())
32
+ val localDateTimeUtcMinus3 = kotlinxDateTimeOperations.getLocalDateTimeUtcMinus3TimeZoneFromInstant(instant = instant)
33
+ assertEquals(" 2024-07-31T09:00" , localDateTimeUtcMinus3.toString())
34
+ }
35
+
36
+ @Test
37
+ fun `create a LocalDateTime from function` () {
38
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
39
+ val localDateTime = kotlinxDateTimeOperations.createLocalDateTime()
40
+ assertTrue { localDateTime is LocalDateTime }
41
+ }
42
+
43
+ @Test
44
+ fun `given an Instant create a LocalDate` () {
45
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
46
+ val localDate = kotlinxDateTimeOperations.getLocalDate()
47
+ assertTrue { localDate is LocalDate }
48
+ val instant = kotlinxDateTimeOperations.getInstant()
49
+ val localDateFromInstant = kotlinxDateTimeOperations.convertInstantToLocalDate(instant)
50
+ assertTrue { localDateFromInstant is LocalDate }
51
+ }
52
+
53
+ @Test
54
+ fun `given an Instant create a LocalTime` () {
55
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
56
+ val localTime = kotlinxDateTimeOperations.getLocalTime()
57
+ assertTrue { localTime is LocalTime }
58
+ val instant = kotlinxDateTimeOperations.getInstant()
59
+ val localTimeFromInstant = kotlinxDateTimeOperations.convertInstantToLocalTime(instant)
60
+ assertTrue { localTimeFromInstant is LocalTime }
61
+ }
62
+
63
+ @Test
64
+ fun `get EpochMilliSeconds from function` () {
65
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
66
+ val epochMilliseconds = kotlinxDateTimeOperations.compareInstantAndEpochMilliseconds()
67
+ assertEquals(1722475458286 , epochMilliseconds)
68
+ }
69
+
70
+ @Test
71
+ fun `parse String using different functions` () {
72
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
73
+ val instant = kotlinxDateTimeOperations.parseStringToInstant()
74
+ assertTrue { instant is Instant }
75
+ val localDateTime = kotlinxDateTimeOperations.parseStringToLocalDateTime()
76
+ assertTrue { localDateTime is LocalDateTime }
77
+ val localDate = kotlinxDateTimeOperations.parseStringToLocalDate()
78
+ assertTrue { localDate is LocalDate }
79
+ val localTime = kotlinxDateTimeOperations.parseStringToLocalTime()
80
+ assertTrue { localTime is LocalTime }
81
+ val dateTimeFormat = kotlinxDateTimeOperations.getDateTimeFormat()
82
+ assertEquals(" 31/07/2024" , dateTimeFormat.format(localDate))
83
+ }
84
+
85
+ @Test
86
+ fun `get DateTimeComponents from function` () {
87
+ val monthDay = DateTimeComponents .Format {
88
+ dayOfMonth()
89
+ char(' -' )
90
+ monthName(MonthNames .ENGLISH_FULL )
91
+ }.parse(" 31-July" )
92
+ assertEquals(" 7" , monthDay.monthNumber.toString())
93
+ assertEquals(" JULY" , monthDay.month.toString())
94
+ assertEquals(" 31" , monthDay.dayOfMonth.toString())
95
+ }
96
+
97
+ @Test
98
+ fun `compare Duration from two Instants` () {
99
+ val instant = Instant .parse(" 2024-07-31T22:00:00.000Z" )
100
+ val olderInstant = Instant .parse(" 2024-03-15T22:00:00.000Z" )
101
+ val duration = instant - olderInstant
102
+ assertEquals(138 , duration.inWholeDays)
103
+ assertEquals(11923200000000000 , duration.inWholeNanoseconds)
104
+ }
105
+
106
+ @Test
107
+ fun `get DateTimePeriod from two Instants` () {
108
+ val instant = Instant .parse(" 2024-07-31T22:00:00.000Z" )
109
+ val olderInstant = Instant .parse(" 2022-03-15T12:05:01.050Z" )
110
+ val dateTimePeriod = olderInstant.periodUntil(instant, TimeZone .UTC )
111
+ assertEquals(2 , dateTimePeriod.years)
112
+ assertEquals(4 , dateTimePeriod.months)
113
+ assertEquals(16 , dateTimePeriod.days)
114
+ assertEquals(9 , dateTimePeriod.hours)
115
+ assertEquals(54 , dateTimePeriod.minutes)
116
+ assertEquals(58 , dateTimePeriod.seconds)
117
+ assertEquals(950000000 , dateTimePeriod.nanoseconds)
118
+ }
119
+
120
+ @Test
121
+ fun `get months between function result` () {
122
+ val instant = Instant .parse(" 2024-07-31T22:00:00.000Z" )
123
+ val olderInstant = Instant .parse(" 2024-03-15T22:00:00.000Z" )
124
+ val monthsUntil = olderInstant.monthsUntil(instant, TimeZone .UTC )
125
+ val months = olderInstant.until(instant, DateTimeUnit .MONTH , TimeZone .UTC )
126
+ assertEquals(4 , monthsUntil.toLong())
127
+ assertEquals(4 , months)
128
+ }
129
+
130
+ @Test
131
+ fun `run arithmetic operations funcitons` () {
132
+ val kotlinxDateTimeOperations = KotlinxDateTimeOperations ()
133
+ assertDoesNotThrow {
134
+ kotlinxDateTimeOperations.addAndSubtract()
135
+ kotlinxDateTimeOperations.addMinutesToLocalDateTime()
136
+ }
137
+ }
138
+
139
+ }
0 commit comments