diff --git a/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java b/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java index 210a0770..3666f254 100644 --- a/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java +++ b/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java @@ -65,7 +65,7 @@ private static double ageFromString(String doubleFormat) { private static final String TIME = INTEGER + DECIMAL_POINT + "\\d{3}"; // Unified Tokens - private static final String DATE_TAG = "\\[" + DATE + "]"; + private static final String DATE_TAG = "\\[(" + DATE + ")]"; private static final String UPTIME_TAG = "\\[(" + TIME + ")s]"; // Pre-unified tokens @@ -81,15 +81,20 @@ private static double ageFromString(String doubleFormat) { public static DateTimeStamp fromGCLogLine(String line) { Matcher matcher; - int captureGroup = 2; + int dateCaptureGroup; + int ageCaptureGroup; if ( line.startsWith("[")) { matcher = UNIFIED_DATE_TIMESTAMP.matcher(line); - captureGroup = 3; - } else + dateCaptureGroup = 2; + ageCaptureGroup = 4; + } else { matcher = PREUNIFIED_DATE_TIMESTAMP.matcher(line); + dateCaptureGroup = 1; + ageCaptureGroup = 2; + } if ( matcher.find()) - return new DateTimeStamp(dateFromString(matcher.group(1)), ageFromString(matcher.group(captureGroup))); + return new DateTimeStamp(dateFromString(matcher.group(dateCaptureGroup)), ageFromString(matcher.group(ageCaptureGroup))); else return EMPTY_DATE; } diff --git a/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java b/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java index 7aedde5e..ebf0b56e 100644 --- a/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java +++ b/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java @@ -483,4 +483,12 @@ void malformedDateTimeStampThrowsException() { assertThrows(IllegalStateException.class, () -> onlyDate.after(onlyTime)); } + @Test + void shouldParseGCLogLineWithBrackets() { + final String dateTimeString = "2025-05-08T11:07:55.681+0530"; + final String gcLogLine = "[" + dateTimeString + "][gc,phases ] GC(4) Other: 0.2ms"; + final DateTimeStamp dateTimeStamp = DateTimeStamp.fromGCLogLine(gcLogLine); + final ZonedDateTime expected = ZonedDateTime.from(formatter.parse(dateTimeString)); + assertTrue(expected.isEqual(dateTimeStamp.getDateTime())); + } } \ No newline at end of file