Skip to content

Commit

Permalink
Merge pull request #655 from ohr/master
Browse files Browse the repository at this point in the history
Allow MINUTE precision for datetimes. Closes #604
  • Loading branch information
jamesagnew committed Jun 8, 2017
2 parents 1404aa0 + aafde2e commit 1b557b0
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 26 deletions.
Expand Up @@ -285,7 +285,7 @@ protected Date parse(String theValue) throws DataFormatException {
cal.set(Calendar.DAY_OF_MONTH, parseInt(value, value.substring(8, 10), 1, actualMaximum));
precision = TemporalPrecisionEnum.DAY;
if (length > 10) {
validateLengthIsAtLeast(value, 17);
validateLengthIsAtLeast(value, 16);
validateCharAtIndexIs(value, 10, 'T'); // yyyy-mm-ddThh:mm:ss
int offsetIdx = getOffsetIndex(value);
String time;
Expand Down
Expand Up @@ -569,6 +569,29 @@ public void testParseMonthNoDashes() throws DataFormatException {
dt.setValueAsString("201302");
}

@Test
public void testParseMinute() throws DataFormatException {
DateTimeDt dt = new DateTimeDt();
dt.setValueAsString("2013-02-03T11:22");

assertEquals("2013-02-03 11:22", myDateInstantParser.format(dt.getValue()).substring(0, 16));
assertEquals("2013-02-03T11:22", dt.getValueAsString());
assertEquals(false, dt.isTimeZoneZulu());
assertNull(dt.getTimeZone());
assertEquals(TemporalPrecisionEnum.MINUTE, dt.getPrecision());
}

@Test
public void testParseMinuteZulu() throws DataFormatException {
DateTimeDt dt = new DateTimeDt();
dt.setValueAsString("2013-02-03T11:22Z");

assertEquals("2013-02-03T11:22Z", dt.getValueAsString());
assertEquals(true, dt.isTimeZoneZulu());
assertEquals("GMT", dt.getTimeZone().getID());
assertEquals(TemporalPrecisionEnum.MINUTE, dt.getPrecision());
}

@Test
public void testParseSecond() throws DataFormatException {
DateTimeDt dt = new DateTimeDt();
Expand All @@ -582,7 +605,7 @@ public void testParseSecond() throws DataFormatException {
}

@Test
public void testParseSecondulu() throws DataFormatException {
public void testParseSecondZulu() throws DataFormatException {
DateTimeDt dt = new DateTimeDt();
dt.setValueAsString("2013-02-03T11:22:33Z");

Expand Down
Expand Up @@ -404,7 +404,7 @@ protected Date parse(String theValue) throws DataFormatException {
cal.set(Calendar.DAY_OF_MONTH, parseInt(value, value.substring(8, 10), 1, actualMaximum));
precision = TemporalPrecisionEnum.DAY;
if (length > 10) {
validateLengthIsAtLeast(value, 17);
validateLengthIsAtLeast(value, 16);
validateCharAtIndexIs(value, 10, 'T'); // yyyy-mm-ddThh:mm:ss
int offsetIdx = getOffsetIndex(value);
String time;
Expand Down
@@ -1,9 +1,16 @@
package org.hl7.fhir.dstu3.model;

import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.either;
import static org.hamcrest.Matchers.endsWith;
import static org.junit.Assert.*;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.DataFormatException;
import ca.uhn.fhir.util.TestUtil;
import ca.uhn.fhir.validation.ValidationResult;
import org.apache.commons.lang3.time.FastDateFormat;
import org.hamcrest.Matchers;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
Expand All @@ -14,20 +21,8 @@
import java.util.Locale;
import java.util.TimeZone;

import org.apache.commons.lang3.time.FastDateFormat;
import org.hamcrest.Matchers;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.DataFormatException;
import ca.uhn.fhir.parser.IParser;
import ca.uhn.fhir.util.TestUtil;
import ca.uhn.fhir.validation.ValidationResult;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

public class BaseDateTimeTypeDstu3Test {
private static FhirContext ourCtx = FhirContext.forDstu3();
Expand Down Expand Up @@ -458,7 +453,7 @@ public void testParseInvalid() {
dt.setValueAsString("1974-12-25+10:00");
fail();
} catch (ca.uhn.fhir.parser.DataFormatException e) {
assertEquals("Invalid date/time format: \"1974-12-25+10:00\"", e.getMessage());
assertEquals("Invalid date/time format: \"1974-12-25+10:00\": Expected character 'T' at index 10 but found +", e.getMessage());
}
try {
DateTimeType dt = new DateTimeType();
Expand Down Expand Up @@ -540,6 +535,29 @@ public void testParseMonthNoDashes() throws DataFormatException {
dt.setValueAsString("201302");
}

@Test
public void testParseMinute() throws DataFormatException {
DateTimeType dt = new DateTimeType();
dt.setValueAsString("2013-02-03T11:22");

assertEquals("2013-02-03 11:22", myDateInstantParser.format(dt.getValue()).substring(0, 16));
assertEquals("2013-02-03T11:22", dt.getValueAsString());
assertEquals(false, dt.isTimeZoneZulu());
assertNull(dt.getTimeZone());
assertEquals(TemporalPrecisionEnum.MINUTE, dt.getPrecision());
}

@Test
public void testParseMinuteZulu() throws DataFormatException {
DateTimeType dt = new DateTimeType();
dt.setValueAsString("2013-02-03T11:22Z");

assertEquals("2013-02-03T11:22Z", dt.getValueAsString());
assertEquals(true, dt.isTimeZoneZulu());
assertEquals("GMT", dt.getTimeZone().getID());
assertEquals(TemporalPrecisionEnum.MINUTE, dt.getPrecision());
}

@Test
public void testParseSecond() throws DataFormatException {
DateTimeType dt = new DateTimeType();
Expand All @@ -553,7 +571,7 @@ public void testParseSecond() throws DataFormatException {
}

@Test
public void testParseSecondulu() throws DataFormatException {
public void testParseSecondZulu() throws DataFormatException {
DateTimeType dt = new DateTimeType();
dt.setValueAsString("2013-02-03T11:22:33Z");

Expand Down
Expand Up @@ -343,7 +343,7 @@ protected Date parse(String theValue) throws IllegalArgumentException {
retVal = ourYearMonthDayTimeMilliFormat.parse(theValue);
}
} catch (ParseException p2) {
throw new IllegalArgumentException("Invalid data/time string (" + p2.getMessage() + "): " + theValue);
throw new IllegalArgumentException("Invalid date/time string (" + p2.getMessage() + "): " + theValue);
}
setTimeZone(theValue, hasMillis);
setPrecision(TemporalPrecisionEnum.MILLI);
Expand All @@ -357,7 +357,7 @@ protected Date parse(String theValue) throws IllegalArgumentException {
retVal = ourYearMonthDayTimeFormat.parse(theValue);
}
} catch (ParseException p2) {
throw new IllegalArgumentException("Invalid data/time string (" + p2.getMessage() + "): " + theValue);
throw new IllegalArgumentException("Invalid date/time string (" + p2.getMessage() + "): " + theValue);
}

setTimeZone(theValue, hasMillis);
Expand All @@ -372,7 +372,7 @@ protected Date parse(String theValue) throws IllegalArgumentException {
retVal = ourYearMonthDayTimeMinsFormat.parse(theValue);
}
} catch (ParseException p2) {
throw new IllegalArgumentException("Invalid data/time string (" + p2.getMessage() + "): " + theValue, p2);
throw new IllegalArgumentException("Invalid date/time string (" + p2.getMessage() + "): " + theValue, p2);
}

setTimeZone(theValue, hasMillis);
Expand Down

0 comments on commit 1b557b0

Please sign in to comment.