Skip to content

Commit 42871a7

Browse files
authored
Date Roller Test Fixes (#520)
Migrating to LocalDate for parsing and date arithmetic to avoid Java Date DST quirks
1 parent 772d1ee commit 42871a7

File tree

1 file changed

+9
-13
lines changed

1 file changed

+9
-13
lines changed

tooling/src/main/java/org/opencds/cqf/tooling/operations/dateroller/RollTestDates.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@
3131
import java.io.File;
3232
import java.io.FileWriter;
3333
import java.io.IOException;
34+
import java.time.LocalDate;
3435
import java.util.ArrayList;
3536
import java.util.Collections;
3637
import java.util.Date;
3738
import java.util.List;
3839
import java.util.Locale;
3940
import java.util.Map;
4041
import java.util.TimeZone;
41-
import java.util.concurrent.TimeUnit;
4242
import java.util.stream.Collectors;
4343

4444
@Operation(name = "RollTestDates")
@@ -190,7 +190,7 @@ public boolean getAllDateElements(FhirContext fhirContext, IBaseResource resourc
190190
thePathToElement.remove(thePathToElement.size() - 1);
191191
thePathToElement.add(s);
192192
}
193-
int daysToAdd = getDaysBetweenDates(getLastUpdatedDate(resource), new Date());
193+
int daysToAdd = getDaysBetweenDates(getLastUpdatedDate(resource), LocalDate.now());
194194
if (theElement instanceof org.hl7.fhir.dstu3.model.BaseDateTimeType) {
195195
TimeZone timeZone = ((org.hl7.fhir.dstu3.model.BaseDateTimeType) theElement).getTimeZone();
196196
((org.hl7.fhir.dstu3.model.BaseDateTimeType) theElement).setValue(DateUtils.addDays(
@@ -249,22 +249,19 @@ public boolean getAllDateElements(FhirContext fhirContext, IBaseResource resourc
249249
return false;
250250
}
251251

252-
private int getDaysBetweenDates(Date start, Date end) {
253-
long startInMs = start.getTime();
254-
long endInMs = end.getTime();
255-
long timeDiff = Math.abs(endInMs - startInMs);
256-
return (int) TimeUnit.DAYS.convert(timeDiff, TimeUnit.MILLISECONDS);
252+
private int getDaysBetweenDates(LocalDate start, LocalDate end) {
253+
return end.getDayOfYear() - start.getDayOfYear();
257254
}
258255

259-
private Date getLastUpdatedDate(IBaseResource resource) {
256+
private LocalDate getLastUpdatedDate(IBaseResource resource) {
260257
IBaseDatatype dateLastUpdated = ExtensionUtil.getExtensionByUrl(
261258
ExtensionUtil.getExtensionByUrl(resource, DATEROLLER_EXT_URL), "dateLastUpdated").getValue();
262259
if (dateLastUpdated instanceof org.hl7.fhir.dstu3.model.BaseDateTimeType) {
263-
return ((org.hl7.fhir.dstu3.model.BaseDateTimeType) dateLastUpdated).getValue();
260+
return LocalDate.parse(((org.hl7.fhir.dstu3.model.BaseDateTimeType) dateLastUpdated).getValueAsString().split("T")[0]);
264261
} else if (dateLastUpdated instanceof org.hl7.fhir.r4.model.BaseDateTimeType) {
265-
return ((org.hl7.fhir.r4.model.BaseDateTimeType) dateLastUpdated).getValue();
262+
return LocalDate.parse(((org.hl7.fhir.r4.model.BaseDateTimeType) dateLastUpdated).getValueAsString().split("T")[0]);
266263
} else if (dateLastUpdated instanceof org.hl7.fhir.r5.model.BaseDateTimeType) {
267-
return ((org.hl7.fhir.r5.model.BaseDateTimeType) dateLastUpdated).getValue();
264+
return LocalDate.parse(((org.hl7.fhir.r5.model.BaseDateTimeType) dateLastUpdated).getValueAsString().split("T")[0]);
268265
} else {
269266
throw new IllegalArgumentException("Unsupported type/version found for dateLastUpdated extension: "
270267
+ dateLastUpdated.fhirType());
@@ -304,8 +301,7 @@ private int getFrequencyInDays(IBaseResource resource) {
304301
}
305302

306303
private boolean doUpdate(IBaseResource resource) {
307-
Date today = new Date();
308-
return DateUtils.addDays(getLastUpdatedDate(resource), getFrequencyInDays(resource)).before(today);
304+
return getLastUpdatedDate(resource).isBefore(LocalDate.now());
309305
}
310306

311307
private void updateDateRollerExtension(FhirContext fhirContext, IBaseResource resource) {

0 commit comments

Comments
 (0)