Skip to content

Commit b01e4bb

Browse files
authored
Merge pull request #182 from ryber/instant
Issue #177 Add support for java.time.Instant
2 parents fcb3a11 + 0396113 commit b01e4bb

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

src/main/java/graphql/scalars/datetime/DateTimeScalar.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import java.time.DateTimeException;
1515
import java.time.OffsetDateTime;
1616
import java.time.ZonedDateTime;
17+
import java.time.Instant;
18+
import java.time.ZoneOffset;
1719
import java.time.format.DateTimeFormatter;
1820
import java.time.format.DateTimeFormatterBuilder;
1921
import java.time.format.DateTimeParseException;
@@ -50,6 +52,8 @@ public String serialize(Object input, GraphQLContext graphQLContext, Locale loca
5052
offsetDateTime = (OffsetDateTime) input;
5153
} else if (input instanceof ZonedDateTime) {
5254
offsetDateTime = ((ZonedDateTime) input).toOffsetDateTime();
55+
} else if (input instanceof Instant){
56+
offsetDateTime = ((Instant) input).atOffset(ZoneOffset.UTC);
5357
} else if (input instanceof String) {
5458
offsetDateTime = parseOffsetDateTime(input.toString(), CoercingSerializeException::new);
5559
} else {
@@ -73,6 +77,8 @@ public OffsetDateTime parseValue(Object input, GraphQLContext graphQLContext, Lo
7377
offsetDateTime = (OffsetDateTime) input;
7478
} else if (input instanceof ZonedDateTime) {
7579
offsetDateTime = ((ZonedDateTime) input).toOffsetDateTime();
80+
} else if (input instanceof Instant){
81+
offsetDateTime = ((Instant)input).atOffset(ZoneOffset.UTC);
7682
} else if (input instanceof String) {
7783
offsetDateTime = parseOffsetDateTime(input.toString(), CoercingParseValueException::new);
7884
} else {

src/test/groovy/graphql/scalars/datetime/DateTimeScalarTest.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import graphql.schema.CoercingParseValueException
88
import graphql.schema.CoercingSerializeException
99
import spock.lang.Unroll
1010

11+
import static graphql.scalars.util.TestKit.mkInstant
1112
import static graphql.scalars.util.TestKit.mkIntValue
1213
import static graphql.scalars.util.TestKit.mkLocalDT
1314
import static graphql.scalars.util.TestKit.mkOffsetDT
@@ -33,6 +34,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
3334
"2022-11-24T01:00:01.02+00:00" | mkOffsetDT("2022-11-24T01:00:01.02+00:00")
3435
mkOffsetDT(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09+10:00")
3536
mkZonedDT(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09+10:00")
37+
mkInstant(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09.00Z")
3638
}
3739

3840
@Unroll
@@ -51,6 +53,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
5153
"2022-11-24T01:00:01.02+00:00" | mkStringValue("2022-11-24T01:00:01.020Z")
5254
mkOffsetDT(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000+10:00")
5355
mkZonedDT(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000+10:00")
56+
mkInstant(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000Z")
5457
}
5558

5659
@Unroll
@@ -97,6 +100,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
97100
"2022-11-24T01:00:01.02+00:00" | "2022-11-24T01:00:01.020Z"
98101
mkOffsetDT(year: 1980, hour: 3) | "1980-08-08T03:10:09.000+10:00"
99102
mkZonedDT(year: 1980, hour: 3) | "1980-08-08T03:10:09.000+10:00"
103+
mkInstant(year: 1980, hour: 3) | "1980-08-08T03:10:09.000Z"
100104
}
101105

102106
def "datetime serialisation bad inputs"() {

src/test/groovy/graphql/scalars/util/TestKit.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import graphql.scalars.country.code.CountryCode
77

88
import java.awt.*
99
import java.time.Duration
10+
import java.time.Instant
1011
import java.time.LocalDate
1112
import java.time.LocalDateTime
1213
import java.time.LocalTime
@@ -54,6 +55,11 @@ class TestKit {
5455
args.min ?: 10, args.secs ?: 9, args.nanos ?: 0, ZoneId.ofOffset("", ZoneOffset.ofHours(10)))
5556
}
5657

58+
static Instant mkInstant(args) {
59+
OffsetDateTime.of(args.year ?: 1969, args.month ?: 8, args.day ?: 8, args.hour ?: 11,
60+
args.min ?: 10, args.secs ?: 9, args.nanos ?: 0, ZoneOffset.UTC).toInstant()
61+
}
62+
5763
static Duration mkDuration(String s) {
5864
Duration.parse(s)
5965
}

0 commit comments

Comments
 (0)