Skip to content

Commit d748e92

Browse files
dmitrii.khlopkovmp911de
dmitrii.khlopkov
authored andcommitted
Add support to parse timestamps with +hh:mm:ss offset.
[resolves #509][#510]
1 parent faff3cc commit d748e92

File tree

5 files changed

+13
-1
lines changed

5 files changed

+13
-1
lines changed

src/main/java/io/r2dbc/postgresql/codec/PostgresqlDateTimeFormatter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class PostgresqlDateTimeFormatter {
4848
.appendFraction(NANO_OF_SECOND, 0, 9, true)
4949
.optionalEnd()
5050
.optionalStart()
51-
.appendOffset("+HH:mm", "+00:00")
51+
.appendOffset("+HH:mm:ss", "+00:00:00")
5252
.optionalEnd()
5353
.toFormatter();
5454

src/test/java/io/r2dbc/postgresql/codec/InstantCodecUnitTests.java

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ void decodeFromTimestampWithTimezone() {
6666
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2018-11-05T00:20:25.039883+09:00[Asia/Tokyo]");
6767
Instant instant = zonedDateTime.toInstant();
6868

69+
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+09:00:00"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))
70+
.isEqualTo(instant);
6971
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+09:00"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))
7072
.isEqualTo(instant);
7173
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+09"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))
@@ -77,6 +79,8 @@ void decodeFromTimestampWithTimezoneUTC() {
7779
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2018-11-05T00:20:25.039883+00:00");
7880
Instant instant = zonedDateTime.toInstant();
7981

82+
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+00:00:00"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))
83+
.isEqualTo(instant);
8084
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+00:00"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))
8185
.isEqualTo(instant);
8286
assertThat(new InstantCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+00"), TIMESTAMPTZ.getObjectId(), FORMAT_TEXT, Instant.class))

src/test/java/io/r2dbc/postgresql/codec/LocalDateTimeCodecUnitTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ void decodeUTC() {
6262
.isEqualTo(localDateTime);
6363
assertThat(new LocalDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:06:31.700426+00"), dataType, FORMAT_TEXT, LocalDateTime.class))
6464
.isEqualTo(localDateTime);
65+
assertThat(new LocalDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:06:31.700426+00:00:00"), dataType, FORMAT_TEXT, LocalDateTime.class))
66+
.isEqualTo(localDateTime);
6567
}
6668

6769
@Test

src/test/java/io/r2dbc/postgresql/codec/OffsetDateTimeCodecUnitTests.java

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ void decode() {
5252

5353
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+09:00"), dataType, FORMAT_TEXT, OffsetDateTime.class))
5454
.isEqualTo(offsetDateTime);
55+
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+09:00:00"), dataType, FORMAT_TEXT, OffsetDateTime.class))
56+
.isEqualTo(offsetDateTime);
5557
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+09"), dataType, FORMAT_TEXT, OffsetDateTime.class))
5658
.isEqualTo(offsetDateTime);
5759
}
@@ -62,6 +64,8 @@ void decodeUTC() {
6264

6365
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+00:00"), dataType, FORMAT_TEXT, OffsetDateTime.class))
6466
.isEqualTo(offsetDateTime);
67+
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+00:00:00"), dataType, FORMAT_TEXT, OffsetDateTime.class))
68+
.isEqualTo(offsetDateTime);
6569
assertThat(new OffsetDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:16:00.899797+00"), dataType, FORMAT_TEXT, OffsetDateTime.class))
6670
.isEqualTo(offsetDateTime);
6771
}

src/test/java/io/r2dbc/postgresql/codec/ZonedDateTimeCodecUnitTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ void decode() {
5454
.isEqualTo(zonedDateTime);
5555
assertThat(new ZonedDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+09"), dataType, FORMAT_TEXT, ZonedDateTime.class))
5656
.isEqualTo(zonedDateTime);
57+
assertThat(new ZonedDateTimeCodec(TEST).decode(encode(TEST, "2018-11-05 00:20:25.039883+09:00:00"), dataType, FORMAT_TEXT, ZonedDateTime.class))
58+
.isEqualTo(zonedDateTime);
5759
}
5860

5961
@Test

0 commit comments

Comments
 (0)