From 98e9aa20651f29474d76d01f74842418471ebe09 Mon Sep 17 00:00:00 2001 From: Leonardo Gonzales Date: Wed, 15 Apr 2026 09:10:09 +0100 Subject: [PATCH 1/2] feat: Add utils method to scape a date time string for use in filter operations --- .../org/hisp/dhis/util/DateTimeUtils.java | 13 +++++++++++ .../org/hisp/dhis/util/DateTimeUtilsTest.java | 23 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/main/java/org/hisp/dhis/util/DateTimeUtils.java b/src/main/java/org/hisp/dhis/util/DateTimeUtils.java index e3f6b03c..df6c58a3 100644 --- a/src/main/java/org/hisp/dhis/util/DateTimeUtils.java +++ b/src/main/java/org/hisp/dhis/util/DateTimeUtils.java @@ -303,6 +303,19 @@ public static String getUtcDateTimeString(Date dateTime) { return String.format("%sZ", getUtcDateFormat(DATE_TIME_FORMAT).format(dateTime)); } + /** + * Escapes a date time string for use in filter operations + * + * @param dateTime the date time string to escape (e.g. {@code "2024-01-15T10:30:00"}). + * @return the escaped date time string (e.g. {@code "2024-01-15T10/:30/:00"}). + */ + public static String escapeDateTimeForFilter(String dateTime) { + if (dateTime == null) { + return ""; + } + return dateTime.replaceAll(":", "/:"); + } + // ----------------------------------------------------------------------------------------------- // Validation methods // ----------------------------------------------------------------------------------------------- diff --git a/src/test/java/org/hisp/dhis/util/DateTimeUtilsTest.java b/src/test/java/org/hisp/dhis/util/DateTimeUtilsTest.java index 58158fc0..3a1e2d11 100644 --- a/src/test/java/org/hisp/dhis/util/DateTimeUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/DateTimeUtilsTest.java @@ -314,6 +314,29 @@ void testIsValidLocalDateTime() { assertTrue(DateTimeUtils.isValidLocalDateTime("2018-12-02T18:12:35.798Z")); } + @Test + void shouldEscapeDateTimeColonsForFilter() { + assertEquals( + "2024-01-15T10/:30/:00", DateTimeUtils.escapeDateTimeForFilter("2024-01-15T10:30:00")); + } + + @Test + void shouldEscapeDateTimeWithSecondsForFilter() { + assertEquals( + "2024-01-15T10/:30/:45.123", + DateTimeUtils.escapeDateTimeForFilter("2024-01-15T10:30:45.123")); + } + + @Test + void shouldReturnSameStringWhenNoColonsPresent() { + assertEquals("2024-01-15", DateTimeUtils.escapeDateTimeForFilter("2024-01-15")); + } + + @Test + void shouldReturnEmptyStringWhenDateTimeIsNull() { + assertEquals("", DateTimeUtils.escapeDateTimeForFilter(null)); + } + // ----------------------------------------------------------------------------------------------- // Support methods // ----------------------------------------------------------------------------------------------- From 791b7035619fc2e869acff10b80d6205a77678e8 Mon Sep 17 00:00:00 2001 From: Leonardo Gonzales Date: Wed, 15 Apr 2026 09:56:19 +0100 Subject: [PATCH 2/2] chore: Improve replace logic --- src/main/java/org/hisp/dhis/util/DateTimeUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/hisp/dhis/util/DateTimeUtils.java b/src/main/java/org/hisp/dhis/util/DateTimeUtils.java index df6c58a3..cc76b020 100644 --- a/src/main/java/org/hisp/dhis/util/DateTimeUtils.java +++ b/src/main/java/org/hisp/dhis/util/DateTimeUtils.java @@ -313,7 +313,7 @@ public static String escapeDateTimeForFilter(String dateTime) { if (dateTime == null) { return ""; } - return dateTime.replaceAll(":", "/:"); + return dateTime.replace(":", "/:"); } // -----------------------------------------------------------------------------------------------