Skip to content

Commit 6955b1b

Browse files
committed
Fix for TEXT format.
1 parent 99e36f1 commit 6955b1b

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class InstantCodec extends AbstractTemporalCodec<Instant> {
3737
private final Supplier<ZoneId> zoneIdSupplier;
3838

3939
InstantCodec(ByteBufAllocator byteBufAllocator, Supplier<ZoneId> zoneIdSupplier) {
40-
super(Instant.class, byteBufAllocator, TIMESTAMPTZ, TIMESTAMPTZ_ARRAY, Instant::toString);
40+
super(Instant.class, byteBufAllocator, TIMESTAMPTZ, TIMESTAMPTZ_ARRAY, PostgresqlDateTimeFormatter::format);
4141
this.zoneIdSupplier = zoneIdSupplier;
4242
}
4343

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

+23-3
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,30 @@
1616

1717
package io.r2dbc.postgresql.codec;
1818

19+
import java.time.Instant;
1920
import java.time.format.DateTimeFormatter;
2021
import java.time.format.DateTimeFormatterBuilder;
2122
import java.time.format.DateTimeParseException;
2223
import java.time.format.SignStyle;
24+
import java.time.temporal.Temporal;
2325
import java.time.temporal.TemporalQuery;
2426

27+
import static java.time.ZoneOffset.UTC;
28+
import static java.time.format.TextStyle.SHORT;
2529
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
30+
import static java.time.temporal.ChronoField.ERA;
2631
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
2732
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
2833
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
2934
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
3035
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
31-
import static java.time.temporal.ChronoField.YEAR;
36+
import static java.time.temporal.ChronoField.YEAR_OF_ERA;
3237

3338
class PostgresqlDateTimeFormatter {
3439

3540
private static final DateTimeFormatter FULL_OFFSET =
3641
new DateTimeFormatterBuilder()
37-
.appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
42+
.appendValue(YEAR_OF_ERA, 4, 10, SignStyle.NEVER)
3843
.appendLiteral('-')
3944
.appendValue(MONTH_OF_YEAR, 2)
4045
.appendLiteral('-')
@@ -52,11 +57,15 @@ class PostgresqlDateTimeFormatter {
5257
.optionalStart()
5358
.appendOffset("+HH:MM:ss", "+00:00:00")
5459
.optionalEnd()
60+
.optionalStart()
61+
.appendLiteral(' ')
62+
.appendText(ERA, SHORT)
63+
.optionalEnd()
5564
.toFormatter();
5665

5766
private static final DateTimeFormatter SHORT_OFFSET =
5867
new DateTimeFormatterBuilder()
59-
.appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
68+
.appendValue(YEAR_OF_ERA, 4, 10, SignStyle.NEVER)
6069
.appendLiteral('-')
6170
.appendValue(MONTH_OF_YEAR, 2)
6271
.appendLiteral('-')
@@ -74,6 +83,10 @@ class PostgresqlDateTimeFormatter {
7483
.optionalStart()
7584
.appendOffset("+HH:mm", "+00:00")
7685
.optionalEnd()
86+
.optionalStart()
87+
.appendLiteral(' ')
88+
.appendText(ERA, SHORT)
89+
.optionalEnd()
7790
.toFormatter();
7891

7992
/**
@@ -104,4 +117,11 @@ static <T> T parse(CharSequence text, TemporalQuery<T> query) {
104117
}
105118
}
106119

120+
static String format(Temporal temporal) {
121+
if (temporal instanceof Instant) {
122+
temporal = ((Instant) temporal).atOffset(UTC);
123+
}
124+
return SHORT_OFFSET.format(temporal);
125+
}
126+
107127
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void doEncode() {
126126
assertThat(this.codec.doEncode(instant))
127127
.hasFormat(FORMAT_TEXT)
128128
.hasType(TIMESTAMPTZ.getObjectId())
129-
.hasValue(encode(TEST, instant.toString()));
129+
.hasValue(encode(TEST, PostgresqlDateTimeFormatter.format(instant)));
130130
}
131131

132132
@Test

0 commit comments

Comments
 (0)