diff --git a/src/main/java/org/hisp/dhis/util/DateTimeUtils.java b/src/main/java/org/hisp/dhis/util/DateTimeUtils.java index e3f6b03c..cc76b020 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.replace(":", "/:"); + } + // ----------------------------------------------------------------------------------------------- // 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 // -----------------------------------------------------------------------------------------------