From ac2e2238a3552485bd01a8cf3957eb92eed7d058 Mon Sep 17 00:00:00 2001 From: Vikas Bodke Date: Tue, 10 Feb 2015 23:06:49 +0530 Subject: [PATCH] Fixes issue #143 opened by @rberger The secFracs field will support upto 12 chars --- .../format/common/DateTimeAttribute.java | 8 ++-- .../resources/format/common/date-time.json | 44 ++++++++++++++++++- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/fge/jsonschema/format/common/DateTimeAttribute.java b/src/main/java/com/github/fge/jsonschema/format/common/DateTimeAttribute.java index d2055314b..20a4a9821 100644 --- a/src/main/java/com/github/fge/jsonschema/format/common/DateTimeAttribute.java +++ b/src/main/java/com/github/fge/jsonschema/format/common/DateTimeAttribute.java @@ -42,13 +42,13 @@ public final class DateTimeAttribute extends AbstractFormatAttribute { private static final List FORMATS = ImmutableList.of( - "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z" ); private static final DateTimeFormatter FORMATTER; static { - final DateTimeParser msParser = new DateTimeFormatterBuilder() - .appendLiteral('.').appendDecimal(millisOfSecond(), 1, 3) + final DateTimeParser secFracsParser = new DateTimeFormatterBuilder() + .appendLiteral('.').appendFractionOfSecond(1,12) .toParser(); DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); @@ -64,7 +64,7 @@ public final class DateTimeAttribute .appendFixedDecimal(minuteOfHour(), 2) .appendLiteral(':') .appendFixedDecimal(secondOfMinute(), 2) - .appendOptional(msParser) + .appendOptional(secFracsParser) .appendTimeZoneOffset("Z", false, 2, 2); FORMATTER = builder.toFormatter(); diff --git a/src/test/resources/format/common/date-time.json b/src/test/resources/format/common/date-time.json index 1f2d96f1d..f79dcc701 100644 --- a/src/test/resources/format/common/date-time.json +++ b/src/test/resources/format/common/date-time.json @@ -25,7 +25,7 @@ "message": "err.format.invalidDate", "msgData": { "value": "2012-02-30T00:00:00+0000", - "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ" ] + "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z" ] }, "msgParams": [ "value", "expected" ] }, @@ -35,8 +35,48 @@ "message": "err.format.invalidDate", "msgData": { "value": "201202030", - "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ" ] + "expected": [ "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z" ] }, "msgParams": [ "value", "expected" ] + }, + { + "data": "2012-08-07T20:42:32.1234Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.1234567Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345678Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345678Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456789Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.1234567890Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.12345678901Z", + "valid": true + }, + { + "data": "2012-08-07T20:42:32.123456789012Z", + "valid": true } ]