1111import org .springframework .data .geo .Point ;
1212import org .springframework .data .redis .core .StringRedisTemplate ;
1313
14- import java .time .Instant ;
15- import java .time .LocalDate ;
16- import java .time .LocalDateTime ;
17- import java .time .ZoneId ;
14+ import java .time .*;
1815import java .time .temporal .ChronoUnit ;
1916import java .util .*;
2017
3532
3633 private LocalDate localDate ;
3734 private LocalDateTime localDateTime ;
35+ private OffsetDateTime localOffsetDateTime ;
3836 private Date date ;
3937 private Point point ;
4038 private Ulid ulid ;
@@ -50,6 +48,7 @@ public void cleanUp() {
5048
5149 localDate = LocalDate .now ();
5250 localDateTime = LocalDateTime .now ();
51+ localOffsetDateTime = OffsetDateTime .now ();
5352 date = new Date ();
5453 point = new Point (-111.83592170193586 ,33.62826024782707 );
5554 ulid = UlidCreator .getMonotonicUlid ();
@@ -67,6 +66,7 @@ public void cleanUp() {
6766 ks = KitchenSink .builder () //
6867 .localDate (localDate ) //
6968 .localDateTime (localDateTime ) //
69+ .localOffsetDateTime (localOffsetDateTime ) //
7070 .date (date ) //
7171 .point (point ) //
7272 .ulid (ulid ) //
@@ -77,6 +77,7 @@ public void cleanUp() {
7777 ks1 = KitchenSink .builder () //
7878 .localDate (localDate ) //
7979 .localDateTime (localDateTime ) //
80+ .localOffsetDateTime (localOffsetDateTime ) //
8081 .date (date ) //
8182 .point (point ) //
8283 .ulid (ulid ) //
@@ -87,6 +88,7 @@ public void cleanUp() {
8788 ks2 = KitchenSink .builder () //
8889 .localDate (localDate ) //
8990 .localDateTime (localDateTime ) //
91+ .localOffsetDateTime (localOffsetDateTime ) //
9092 .date (date ) //
9193 .point (point ) //
9294 .ulid (ulid ) //
@@ -98,6 +100,7 @@ public void cleanUp() {
98100 ks3 = KitchenSink .builder () //
99101 .localDate (localDate ) //
100102 .localDateTime (localDateTime ) //
103+ .localOffsetDateTime (localOffsetDateTime ) //
101104 .date (date ) //
102105 .point (point ) //
103106 .ulid (ulid ) //
@@ -109,6 +112,7 @@ public void cleanUp() {
109112 ks4 = KitchenSink .builder () //
110113 .localDate (localDate ) //
111114 .localDateTime (localDateTime ) //
115+ .localOffsetDateTime (localOffsetDateTime ) //
112116 .date (date ) //
113117 .point (point ) //
114118 .ulid (ulid ) //
@@ -134,6 +138,11 @@ void testHashSerialization() {
134138 long localDateTimeInMillis = localDateTimeInstant .toEpochMilli ();
135139 long rawLocalDateTime = Long .parseLong (Objects .requireNonNull (template .opsForHash ().get (key , "localDateTime" )).toString ());
136140
141+ // OffsetDateTime
142+ Instant localOffsetDateTimeInstant = localOffsetDateTime .atZoneSameInstant (ZoneId .systemDefault ()).toInstant ();
143+ long localOffsetDateTimeInMillis = localOffsetDateTimeInstant .toEpochMilli ();
144+ long rawlocalOffsetDateTime = Long .parseLong (Objects .requireNonNull (template .opsForHash ().get (key , "localOffsetDateTime" )).toString ());
145+
137146 // Date
138147 long dateInMillis = date .getTime ();
139148 long rawDate = Long .parseLong (Objects .requireNonNull (template .opsForHash ().get (key , "date" )).toString ());
@@ -150,6 +159,7 @@ void testHashSerialization() {
150159
151160 assertThat (rawLocalDate ).isEqualTo (localDateAsUnixTS );
152161 assertThat (rawLocalDateTime ).isEqualTo (localDateTimeInMillis );
162+ assertThat (rawlocalOffsetDateTime ).isEqualTo (localOffsetDateTimeInMillis );
153163 assertThat (rawDate ).isEqualTo (dateInMillis );
154164 assertThat (rawPoint ).isEqualTo (redisGeo );
155165 assertThat (rawUlid ).isEqualTo (ulid .toString ());
@@ -168,6 +178,7 @@ void testHashDeserialization() {
168178 // NOTE: We lose nanosecond precision in order to store LocalDateTime as long in
169179 // order to allow for RediSearch range queries
170180 assertThat (fromDb .get ().getLocalDateTime ()).isEqualToIgnoringNanos (localDateTime );
181+ assertThat (fromDb .get ().getLocalOffsetDateTime ()).isEqualToIgnoringNanos (localOffsetDateTime );
171182 assertThat (fromDb .get ().getSetThings ()).isEqualTo (setThings );
172183 assertThat (fromDb .get ().getListThings ()).isEqualTo (listThings );
173184 }
0 commit comments