GraphQL ISO Date is a set of RFC 3339 compliant date/time scalar types to be used with graphql-java.
A set of ISO 33601, RFC 3339 compatible date time scalars for GraphQL Java implementation (graphql-java) and GraphQL Java Kickstart (com.graphql-java-kickstart:graphql-spring-boot-starter).
java.util.Date, java.time.LocalDate, java.time.LocalDateTime
Format | JSON String |
---|---|
yyyy-MM-dd'T'HH:MM:ss.SSS'Z' | 2017-07-09T13:14:45.947Z |
yyyy-MM-dd'T'HH:MM:ss'Z' | 2017-07-09T11:54:42Z |
yyyy-MM-dd'T'HH:MM:ss | 2017-07-09T11:54:42' |
yyyy-MM-dd | 2017-07-09 |
java.time.LocalTime
Format | JSON String |
---|---|
HH:MM:ss.SSS | 17:59:59.129 |
HH:MM:ss | 17:59:59 |
HH:MM | 17:59 |
Add graphql-datetime-spring-boot-starter
starter to your project first.
Add folowing to your pom.xml
:
<dependency>
<groupId>com.zhokhov.graphql</groupId>
<artifactId>graphql-datetime-spring-boot-starter</artifactId>
<version>1.8.0</version>
</dependency>
Add folowing to your build.gradle
:
compile 'com.zhokhov.graphql:graphql-datetime-spring-boot-starter:1.8.0'
Add these scalars to your .graphqls
schema file:
# java.util.Date implementation
scalar Date
# java.time.LocalDate implementation
scalar LocalDate
# java.time.LocalDateTime implementation
scalar LocalDateTime
# java.time.LocalTime implementation
scalar LocalTime
# javal.time.OffsetDateTime implementation
scalar OffsetDateTime
You can rename the scalar however you want with by simply adding the following properties to you application.yaml:
graphql:
datetime:
scalars:
date:
scalarName: MyDate
localDate:
scalarName: MyLocalDate
localDateTime:
scalarName: MyLocalDateTime
localTime:
scalarName: MyLocalTime
offsetDateTime:
scalarName: MyOffsetDateTime
You can enable automatic zone conversion by adding the following property to your application.yaml. This will
automatically convert between UTC and the default TimeZone for LocalDateTime
:
graphql:
datetime:
scalars:
zone-conversion-enabled: true
If using OffsetDateTime in order to present the offset and disable the automatic convertion to UTC from Jackson you should set to your application.yml the following:
spring:
jackson:
deserialization:
adjust-dates-to-context-time-zone: false
Now you can use these scalars in your application. Here is a graphql-datetime spring boot sample application, https://github.com/donbeave/graphql-java-datetime/tree/master/graphql-datetime-sample-app.
To report any bug, please use the project Issues section on GitHub.
Please contribute using Github Flow. Create a branch, add commits, and open a pull request.
Copyright © 2017-2020 Alexey Zhokhov. All rights reserved.
This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.