Skip to content

Commit 58e0095

Browse files
committed
Add org.apache.commons.lang3.time.DateUtils.toZonedDateTime(Date[,
TimeZone])
1 parent e917dd0 commit 58e0095

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

src/changes/changes.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ The <action> type attribute can be add,update,fix,remove.
6969
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.lang3.StringUtils.indexOfAny(CharSequence, int, char...).</action>
7070
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.lang3.concurrent.ConcurrentException.ConcurrentException(String).</action>
7171
<action type="add" dev="ggregory" due-to="Finger, Gary Gregory, Piotr P. Karwasz">Add org.apache.commons.lang3.time.DateUtils.toLocalDateTime(Date[, TimeZone]) #1385.</action>
72-
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.lang3.time.DateUtils.toOffsetDateTime(Date[, TimeZone]) #1385.</action>
72+
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.lang3.time.DateUtils.toOffsetDateTime(Date[, TimeZone]).</action>
73+
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.lang3.time.DateUtils.toZonedDateTime(Date[, TimeZone]).</action>
7374
<!-- UPDATE -->
7475
<action type="update" dev="ggregory" due-to="Gary Gregory">[test] Bump org.apache.commons:commons-text from 1.13.1 to 1.14.0.</action>
7576
</release>

src/main/java/org/apache/commons/lang3/time/DateUtils.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.time.LocalDateTime;
2222
import java.time.OffsetDateTime;
2323
import java.time.ZoneId;
24+
import java.time.ZonedDateTime;
2425
import java.util.Calendar;
2526
import java.util.Date;
2627
import java.util.Iterator;
@@ -1675,6 +1676,29 @@ public static OffsetDateTime toOffsetDateTime(final Date date, final TimeZone ti
16751676
return OffsetDateTime.ofInstant(date.toInstant(), toZoneId(timeZone));
16761677
}
16771678

1679+
/**
1680+
* Converts a {@link Date} to a {@link ZonedDateTime}.
1681+
*
1682+
* @param date the Date to convert, not null.
1683+
* @return a new ZonedDateTime.
1684+
* @since 3.19.0
1685+
*/
1686+
public static ZonedDateTime toZonedDateTime(final Date date) {
1687+
return toZonedDateTime(date, TimeZone.getDefault());
1688+
}
1689+
1690+
/**
1691+
* Converts a {@link Date} to a {@link ZonedDateTime}.
1692+
*
1693+
* @param date the Date to convert to a ZonedDateTime, not null.
1694+
* @param timeZone the time zone, null maps to to the default time zone.
1695+
* @return a new ZonedDateTime.
1696+
* @since 3.19.0
1697+
*/
1698+
public static ZonedDateTime toZonedDateTime(final Date date, final TimeZone timeZone) {
1699+
return ZonedDateTime.ofInstant(date.toInstant(), toZoneId(timeZone));
1700+
}
1701+
16781702
private static ZoneId toZoneId(final TimeZone timeZone) {
16791703
return TimeZones.toTimeZone(timeZone).toZoneId();
16801704
}

src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.time.OffsetDateTime;
3636
import java.time.ZoneId;
3737
import java.time.ZoneOffset;
38+
import java.time.ZonedDateTime;
3839
import java.time.temporal.ChronoUnit;
3940
import java.util.Calendar;
4041
import java.util.Date;
@@ -1319,7 +1320,8 @@ void testToLocalDateTimeTimeZone(final LocalDateTime expected, final Date date,
13191320
@ParameterizedTest
13201321
@MethodSource("testToLocalDateTimeTimeZone")
13211322
void testToOffsetDateTime(final LocalDateTime expected, final Date date, final TimeZone timeZone) {
1322-
assertEquals(OffsetDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()), DateUtils.toOffsetDateTime(date));
1323+
final OffsetDateTime offsetDateTime = DateUtils.toOffsetDateTime(date);
1324+
assertEquals(OffsetDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()), offsetDateTime);
13231325
}
13241326

13251327
@ParameterizedTest
@@ -1328,6 +1330,24 @@ void testToOffsetDateTimeTimeZone(final LocalDateTime expected, final Date date,
13281330
assertEquals(expected, DateUtils.toOffsetDateTime(date, timeZone).toLocalDateTime());
13291331
}
13301332

1333+
@ParameterizedTest
1334+
@MethodSource("testToLocalDateTimeTimeZone")
1335+
void testToZonedDateTime(final LocalDateTime expected, final Date date, final TimeZone timeZone) {
1336+
final ZonedDateTime zonedDateTime = DateUtils.toZonedDateTime(date);
1337+
assertEquals(ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()), zonedDateTime);
1338+
// Using atZone()
1339+
assertEquals(date.toInstant().atZone(ZoneId.systemDefault()), zonedDateTime);
1340+
}
1341+
1342+
@ParameterizedTest
1343+
@MethodSource("testToLocalDateTimeTimeZone")
1344+
void testToZonedDateTimeTimeZone(final LocalDateTime expected, final Date date, final TimeZone timeZone) {
1345+
final ZonedDateTime zonedDateTime = DateUtils.toZonedDateTime(date, timeZone);
1346+
assertEquals(expected, zonedDateTime.toOffsetDateTime().toLocalDateTime());
1347+
// Using atZone()
1348+
assertEquals(date.toInstant().atZone(TimeZones.toTimeZone(timeZone).toZoneId()), zonedDateTime);
1349+
}
1350+
13311351
/**
13321352
* Tests various values with the trunc method.
13331353
*

0 commit comments

Comments
 (0)