From 17e59d91abf769104d9127be7b6e8a1339670266 Mon Sep 17 00:00:00 2001 From: molexx Date: Wed, 17 Oct 2018 23:29:10 +0100 Subject: [PATCH 1/2] GraphQLDateCoercing optionally takes a date format mask to use instead of DateFormat.getInstance()'s default SHORT pattern --- .../graphql/jpa/query/schema/JavaScalars.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java index 14c0f99b3..aa3124052 100644 --- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java +++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java @@ -19,6 +19,7 @@ import java.math.BigInteger; import java.text.DateFormat; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; @@ -194,6 +195,25 @@ private LocalDate parseStringToLocalDate(String input) { }; public static class GraphQLDateCoercing implements Coercing { + final DateFormat df; + + + /** + * Parse date strings matching DateFormat's locale-sensitive SHORT pattern, + * see: https://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html + */ + public GraphQLDateCoercing() { + df = DateFormat.getInstance(); + } + + /** + * Parse date strings according to the provided SimpleDateFormat pattern + * + * @param dateFormatString e.g. "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" for "2001-07-04T12:08:56.235-07:00" + */ + public GraphQLDateCoercing(String dateFormatString) { + df = new SimpleDateFormat(dateFormatString); + } @Override public Object serialize(Object input) { @@ -227,7 +247,7 @@ public Object parseLiteral(Object input) { private Date parseStringToDate(String input) { try { - return DateFormat.getInstance().parse(input); + return df.parse(input); } catch (ParseException e) { log.warn("Failed to parse Date from input: " + input, e); return null; From 05a1245b8247e32bf209b18e8db7d9f880cab89f Mon Sep 17 00:00:00 2001 From: molexx Date: Mon, 12 Nov 2018 00:14:42 +0000 Subject: [PATCH 2/2] use date format from #ad322458 --- .../graphql/jpa/query/schema/JavaScalars.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java index aa3124052..2b0161b69 100644 --- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java +++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/JavaScalars.java @@ -199,11 +199,10 @@ public static class GraphQLDateCoercing implements Coercing { /** - * Parse date strings matching DateFormat's locale-sensitive SHORT pattern, - * see: https://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html + * Default to pattern 'yyyy-MM-dd' */ public GraphQLDateCoercing() { - df = DateFormat.getInstance(); + df = new SimpleDateFormat("yyyy-MM-dd"); } /**