Skip to content

Commit d37f8e4

Browse files
authored
Add Date & Calendar extensions (#26)
1 parent 8eabe7c commit d37f8e4

File tree

11 files changed

+101
-91
lines changed

11 files changed

+101
-91
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ val result = "2021-06-07".parseZonedDateTime()
3333
```kotlin
3434
val result = ZonedDateTimeUtil.new(year = 2021, month = 3, day = 25)
3535

36-
val result = LocalDateTimeUtil.new(Date())
36+
val result = Date().toLocalDateTime()
3737

38-
val result = LocalDateUtil.new(GregorianCalendar())
38+
val result = GregorianCalendar().toLocalDate()
3939

4040
val result = LocalTimeUtil.new(hour = 5, minute = 30)
4141
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package javatimefun.calendar.extensions
2+
3+
import javatimefun.localdate.LocalDateUtil
4+
import javatimefun.localdatetime.LocalDateTimeUtil
5+
import javatimefun.localtime.LocalTimeUtil
6+
import java.time.*
7+
import java.util.Calendar
8+
9+
/**
10+
* @param useSystemTimeZone If true, converts to time zone of the device, else leaves as is on calendar.
11+
* @return ZonedDateTime.
12+
*/
13+
fun Calendar.toZonedDateTime(): ZonedDateTime =
14+
ZonedDateTime.ofInstant(this.toInstant(), ZoneId.of(this.timeZone.id))
15+
16+
fun Calendar.toLocalDateTime(): LocalDateTime =
17+
LocalDateTimeUtil.new(this.toInstant().toEpochMilli())
18+
19+
fun Calendar.toLocalDate(): LocalDate =
20+
LocalDateUtil.new(this.toInstant().toEpochMilli())
21+
22+
fun Calendar.toLocalTime(): LocalTime =
23+
LocalTimeUtil.new(this.toInstant().toEpochMilli())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package javatimefun.date.extensions
2+
3+
import javatimefun.localdate.LocalDateUtil
4+
import javatimefun.localdatetime.LocalDateTimeUtil
5+
import javatimefun.localtime.LocalTimeUtil
6+
import javatimefun.zoneddatetime.ZonedDateTimeUtil
7+
import java.time.LocalDate
8+
import java.time.LocalDateTime
9+
import java.time.LocalTime
10+
import java.time.ZonedDateTime
11+
import java.util.Date
12+
13+
/**
14+
* @param useSystemTimeZone If true, converts to time zone of the device, else leaves as UTC.
15+
* @return ZonedDateTime.
16+
*/
17+
fun Date.toZonedDateTime(useSystemTimeZone: Boolean = true): ZonedDateTime =
18+
ZonedDateTimeUtil.new(this.toInstant().toEpochMilli(), useSystemTimeZone)
19+
20+
/**
21+
* @return LocalDateTime.
22+
*/
23+
fun Date.toLocalDateTime(): LocalDateTime =
24+
LocalDateTimeUtil.new(this.toInstant().toEpochMilli())
25+
26+
/**
27+
* @return LocalDate.
28+
*/
29+
fun Date.toLocalDate(): LocalDate =
30+
LocalDateUtil.new(this.toInstant().toEpochMilli())
31+
32+
/**
33+
* @return LocalTime.
34+
*/
35+
fun Date.toLocalTime(): LocalTime =
36+
LocalTimeUtil.new(this.toInstant().toEpochMilli())

src/main/kotlin/javatimefun/localdate/LocalDateUtil.kt

+2-15
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,6 @@ object LocalDateUtil {
2323
* @param epochMilliseconds Epoch time, aka Unix time, are seconds elapsed since January 1st 1970 at 00:00:00 UTC.
2424
* @return LocalDate.
2525
*/
26-
fun new(epochMilliseconds: Long): LocalDate = LocalDate.ofEpochDay(epochMilliseconds / 1000 / 60 / 60 / 24)
27-
28-
/**
29-
* @param date A wrapper of Epoch time in UTC.
30-
* @return LocalDate.
31-
*/
32-
fun new(date: Date): LocalDate =
33-
javatimefun.localdate.LocalDateUtil.new(date.toInstant().toEpochMilli())
34-
35-
/**
36-
* @param calendar Calendar, a date time variable that supports time zones.
37-
* @return LocalDate.
38-
*/
39-
fun new(calendar: Calendar): LocalDate =
40-
javatimefun.localdate.LocalDateUtil.new(calendar.toInstant().toEpochMilli())
26+
fun new(epochMilliseconds: Long): LocalDate =
27+
LocalDate.ofEpochDay(epochMilliseconds / 1000 / 60 / 60 / 24)
4128
}

src/main/kotlin/javatimefun/localdatetime/LocalDateTimeUtil.kt

+6-17
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package javatimefun.localdatetime
22

3+
import javatimefun.date.extensions.toLocalDateTime
4+
import java.time.Instant
35
import java.time.LocalDateTime
46
import java.time.Month
5-
import java.time.ZoneId
6-
import java.util.Calendar
7+
import java.time.ZoneOffset
78
import java.util.Date
89

910
/**
@@ -58,21 +59,9 @@ object LocalDateTimeUtil {
5859
* @param epochMilliseconds Epoch time, aka Unix time, are seconds elapsed since January 1st 1970 at 00:00:00 UTC.
5960
* @return LocalDateTime.
6061
*/
61-
fun new(epochMilliseconds: Long): LocalDateTime = new(Date(epochMilliseconds))
62-
63-
/**
64-
* @param date A wrapper of Epoch time in UTC.
65-
* @return LocalDateTime.
66-
*/
67-
fun new(date: Date): LocalDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("UTC"))
68-
69-
/**
70-
* @param calendar Calendar, a date time variable that supports time zones.
71-
* @return LocalDateTime.
72-
*/
73-
fun new(calendar: Calendar, useSystemTimeZone: Boolean = true): LocalDateTime =
62+
fun new(epochMilliseconds: Long): LocalDateTime =
7463
LocalDateTime.ofInstant(
75-
calendar.toInstant(),
76-
if (useSystemTimeZone) ZoneId.systemDefault() else ZoneId.of("UTC")
64+
Instant.ofEpochMilli(epochMilliseconds),
65+
ZoneOffset.UTC
7766
)
7867
}

src/main/kotlin/javatimefun/localtime/LocalTimeUtil.kt

+9-16
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package javatimefun.localtime
22

3-
import javatimefun.localdatetime.LocalDateTimeUtil
3+
import java.time.Instant
4+
import java.time.LocalDateTime
45
import java.time.LocalTime
5-
import java.util.Date
6-
import java.util.Calendar
6+
import java.time.ZoneOffset
77

88
/**
99
* Contains helper functions that only serve to create new LocalTimes.
@@ -48,17 +48,10 @@ object LocalTimeUtil {
4848
* @param epochMilliseconds Epoch time, aka Unix time, are seconds elapsed since January 1st 1970 at 00:00:00 UTC.
4949
* @return LocalTime.
5050
*/
51-
fun new(epochMilliseconds: Long): LocalTime = LocalDateTimeUtil.new(epochMilliseconds).toLocalTime()
52-
53-
/**
54-
* @param date A wrapper of Epoch time in UTC.
55-
* @return LocalTime.
56-
*/
57-
fun new(date: Date): LocalTime = LocalDateTimeUtil.new(date).toLocalTime()
58-
59-
/**
60-
* @param calendar Calendar, a date time variable that supports time zones.
61-
* @return LocalTime.
62-
*/
63-
fun new(calendar: Calendar): LocalTime = LocalDateTimeUtil.new(calendar, useSystemTimeZone = false).toLocalTime()
51+
fun new(epochMilliseconds: Long): LocalTime =
52+
LocalDateTime.ofInstant(
53+
Instant.ofEpochMilli(epochMilliseconds),
54+
ZoneOffset.UTC
55+
)
56+
.toLocalTime()
6457
}

src/main/kotlin/javatimefun/zoneddatetime/ZonedDateTimeUtil.kt

+9-34
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
package javatimefun.zoneddatetime
22

3-
import java.time.Instant
4-
import java.time.LocalDateTime
5-
import java.time.Month
6-
import java.time.ZoneId
7-
import java.time.ZonedDateTime
8-
import java.util.Calendar
9-
import java.util.Date
3+
import java.time.*
104

115
/**
126
* Contains helper functions that only serve to create new ZonedDateTimes.
137
* Creation methods do not include parsing methods.
148
*/
159
object ZonedDateTimeUtil {
1610

17-
private val UTC get() = ZoneId.of("UTC")
18-
1911
/**
2012
* @param year Year, ie, 2020.
2113
* @param month Month with range 1-12, i.e. 1 for January.
@@ -38,7 +30,10 @@ object ZonedDateTimeUtil {
3830
useSystemTimeZone: Boolean = true
3931
): ZonedDateTime {
4032
val localDateTime = LocalDateTime.of(year, Month.of(month), day, hourIn24, minute, second, nano)
41-
return ZonedDateTime.of(localDateTime, if (useSystemTimeZone) ZoneId.systemDefault() else UTC)
33+
return ZonedDateTime.of(
34+
localDateTime,
35+
if (useSystemTimeZone) ZoneId.systemDefault() else ZoneOffset.UTC
36+
)
4237
}
4338

4439
/**
@@ -71,28 +66,8 @@ object ZonedDateTimeUtil {
7166
* @return ZonedDateTime.
7267
*/
7368
fun new(epochMilliseconds: Long, useSystemTimeZone: Boolean = true): ZonedDateTime =
74-
getZonedDateTimeFromInstant(Instant.ofEpochMilli(epochMilliseconds), useSystemTimeZone)
75-
76-
/**
77-
* @param date A wrapper of Epoch time in UTC.
78-
* @param useSystemTimeZone If true, converts to time zone of the device, else leaves as UTC.
79-
* @return ZonedDateTime.
80-
*/
81-
fun new(date: Date, useSystemTimeZone: Boolean = true): ZonedDateTime =
82-
getZonedDateTimeFromInstant(date.toInstant(), useSystemTimeZone)
83-
84-
/**
85-
* @param calendar Calendar, a date time variable that supports time zones.
86-
* @param useSystemTimeZone If true, converts to time zone of the device, else leaves as is on calendar.
87-
* @return ZonedDateTime.
88-
*/
89-
fun new(calendar: Calendar, useSystemTimeZone: Boolean = true): ZonedDateTime {
90-
if (useSystemTimeZone) {
91-
return getZonedDateTimeFromInstant(calendar.toInstant(), true)
92-
}
93-
return ZonedDateTime.ofInstant(calendar.toInstant(), ZoneId.of(calendar.timeZone.id))
94-
}
95-
96-
private fun getZonedDateTimeFromInstant(instant: Instant, useSystemTimeZone: Boolean): ZonedDateTime =
97-
ZonedDateTime.ofInstant(instant, if (useSystemTimeZone) ZoneId.systemDefault() else UTC)
69+
ZonedDateTime.ofInstant(
70+
Instant.ofEpochMilli(epochMilliseconds),
71+
if (useSystemTimeZone) ZoneId.systemDefault() else ZoneOffset.UTC
72+
)
9873
}

src/test/kotlin/localdate/LocalDateUtilTest.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package localdate
22

3+
import javatimefun.calendar.extensions.toLocalDate
4+
import javatimefun.date.extensions.toLocalDate
35
import javatimefun.localdate.extensions.getMonthBaseZero
46
import org.junit.jupiter.api.Assertions.assertEquals
57
import org.junit.jupiter.api.Test
@@ -31,7 +33,7 @@ class LocalDateUtilTest {
3133

3234
// when
3335
val date = Date(epoch)
34-
val localDate = javatimefun.localdate.LocalDateUtil.new(date)
36+
val localDate = date.toLocalDate()
3537

3638
// then
3739
assertEquals(2011, localDate.year)
@@ -50,7 +52,7 @@ class LocalDateUtilTest {
5052
timeZone = TimeZone.getTimeZone("UTC")
5153
time = date
5254
}
53-
val localDate = javatimefun.localdate.LocalDateUtil.new(calendar)
55+
val localDate = calendar.toLocalDate()
5456

5557
// then
5658
assertEquals(calendar[Calendar.YEAR], localDate.year)

src/test/kotlin/localdatetime/LocalDateTimeUtilTest.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package localdatetime
22

3+
import javatimefun.calendar.extensions.toLocalDateTime
4+
import javatimefun.date.extensions.toLocalDateTime
35
import javatimefun.localdatetime.LocalDateTimeUtil
46
import javatimefun.localdatetime.extensions.getMonthBaseZero
57
import org.junit.jupiter.api.Assertions.assertEquals
@@ -35,7 +37,7 @@ class LocalDateTimeUtilTest {
3537

3638
// when
3739
val date = Date(epoch)
38-
val localDateTime = LocalDateTimeUtil.new(date)
40+
val localDateTime = date.toLocalDateTime()
3941

4042
// then
4143
assertEquals(2011, localDateTime.year)
@@ -57,7 +59,7 @@ class LocalDateTimeUtilTest {
5759
timeZone = TimeZone.getTimeZone("UTC")
5860
time = date
5961
}
60-
val localDateTime = LocalDateTimeUtil.new(calendar, useSystemTimeZone = false)
62+
val localDateTime = calendar.toLocalDateTime()
6163

6264
// then
6365
assertEquals(2011, localDateTime.year)

src/test/kotlin/localtime/LocalTimeUtilTest.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package localtime
22

3+
import javatimefun.calendar.extensions.toLocalTime
4+
import javatimefun.date.extensions.toLocalTime
35
import javatimefun.localtime.LocalTimeUtil
46
import org.junit.jupiter.api.Assertions.assertEquals
57
import org.junit.jupiter.api.Test
@@ -31,7 +33,7 @@ class LocalTimeUtilTest {
3133

3234
// when
3335
val date = Date(epoch)
34-
val localTime = LocalTimeUtil.new(date)
36+
val localTime = date.toLocalTime()
3537

3638
// then
3739
assertEquals(5, localTime.hour)
@@ -50,7 +52,7 @@ class LocalTimeUtilTest {
5052
timeZone = TimeZone.getTimeZone("UTC")
5153
time = date
5254
}
53-
val localTime = LocalTimeUtil.new(calendar)
55+
val localTime = calendar.toLocalTime()
5456

5557
// then
5658
assertEquals(5, localTime.hour)

src/test/kotlin/zoneddatetime/ZonedDateTimeUtilTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package zoneddatetime
22

3+
import javatimefun.calendar.extensions.toZonedDateTime
34
import javatimefun.zoneddatetime.ZonedDateTimeUtil
45
import org.junit.jupiter.api.Assertions.assertEquals
56
import org.junit.jupiter.api.Test
@@ -149,7 +150,7 @@ class ZonedDateTimeTest {
149150
timeZone = TimeZone.getTimeZone(timeZoneId)
150151
set(year, month, day, hour, minute, second)
151152
}
152-
val zonedDateTime = ZonedDateTimeUtil.new(calendar, useSystemTimeZone = false)
153+
val zonedDateTime = calendar.toZonedDateTime()
153154

154155
// then
155156
assertEquals(calendar.timeZone.id, zonedDateTime.zone.id)

0 commit comments

Comments
 (0)