1616 */
1717package org .apache .logging .log4j .core .pattern ;
1818
19- import java .util .regex .Pattern ;
2019import org .jspecify .annotations .NullMarked ;
2120
2221/**
2928public enum NamedInstantPattern {
3029 ABSOLUTE ("HH:mm:ss,SSS" ),
3130
32- ABSOLUTE_MICROS ("HH:mm:ss,SSSSSS" ),
31+ ABSOLUTE_MICROS ("HH:mm:ss,SSSSSS" , "HH:mm:ss,nnnnnn" ),
3332
34- ABSOLUTE_NANOS ("HH:mm:ss,SSSSSSSSS" ),
33+ ABSOLUTE_NANOS ("HH:mm:ss,SSSSSSSSS" , "HH:mm:ss,nnnnnnnnn" ),
3534
3635 ABSOLUTE_PERIOD ("HH:mm:ss.SSS" ),
3736
@@ -43,9 +42,9 @@ public enum NamedInstantPattern {
4342
4443 DEFAULT ("yyyy-MM-dd HH:mm:ss,SSS" ),
4544
46- DEFAULT_MICROS ("yyyy-MM-dd HH:mm:ss,SSSSSS" ),
45+ DEFAULT_MICROS ("yyyy-MM-dd HH:mm:ss,SSSSSS" , "yyyy-MM-dd HH:mm:ss,nnnnnn" ),
4746
48- DEFAULT_NANOS ("yyyy-MM-dd HH:mm:ss,SSSSSSSSS" ),
47+ DEFAULT_NANOS ("yyyy-MM-dd HH:mm:ss,SSSSSSSSS" , "yyyy-MM-dd HH:mm:ss,nnnnnnnnn" ),
4948
5049 DEFAULT_PERIOD ("yyyy-MM-dd HH:mm:ss.SSS" ),
5150
@@ -55,26 +54,30 @@ public enum NamedInstantPattern {
5554
5655 ISO8601 ("yyyy-MM-dd'T'HH:mm:ss,SSS" ),
5756
58- ISO8601_OFFSET_DATE_TIME_HH ("yyyy-MM-dd'T'HH:mm:ss,SSSx" ),
57+ ISO8601_OFFSET_DATE_TIME_HH ("yyyy-MM-dd'T'HH:mm:ss,SSSx" , "yyyy-MM-dd'T'HH:mm:ss,SSSX" ),
5958
60- ISO8601_OFFSET_DATE_TIME_HHMM ("yyyy-MM-dd'T'HH:mm:ss,SSSxx" ),
59+ ISO8601_OFFSET_DATE_TIME_HHMM ("yyyy-MM-dd'T'HH:mm:ss,SSSxx" , "yyyy-MM-dd'T'HH:mm:ss,SSSXX" ),
6160
62- ISO8601_OFFSET_DATE_TIME_HHCMM ("yyyy-MM-dd'T'HH:mm:ss,SSSxxx" ),
61+ ISO8601_OFFSET_DATE_TIME_HHCMM ("yyyy-MM-dd'T'HH:mm:ss,SSSxxx" , "yyyy-MM-dd'T'HH:mm:ss,SSSXXX" ),
6362
6463 ISO8601_PERIOD ("yyyy-MM-dd'T'HH:mm:ss.SSS" ),
6564
66- ISO8601_PERIOD_MICROS ("yyyy-MM-dd'T'HH:mm:ss.SSSSSS" ),
65+ ISO8601_PERIOD_MICROS ("yyyy-MM-dd'T'HH:mm:ss.SSSSSS" , "yyyy-MM-dd'T'HH:mm:ss.nnnnnn" ),
6766
6867 US_MONTH_DAY_YEAR2_TIME ("dd/MM/yy HH:mm:ss.SSS" ),
6968
7069 US_MONTH_DAY_YEAR4_TIME ("dd/MM/yyyy HH:mm:ss.SSS" );
7170
72- private static final Pattern NANO_PATTERN = Pattern .compile ("S{4,}" );
73-
7471 private final String pattern ;
72+ private final String legacyPattern ;
7573
7674 NamedInstantPattern (String pattern ) {
75+ this (pattern , pattern );
76+ }
77+
78+ NamedInstantPattern (String pattern , String legacyPattern ) {
7779 this .pattern = pattern ;
80+ this .legacyPattern = legacyPattern ;
7881 }
7982
8083 /**
@@ -153,11 +156,6 @@ public String getPattern() {
153156 * {@link org.apache.logging.log4j.core.util.datetime.FixedDateFormat.FixedFormat}
154157 */
155158 String getLegacyPattern () {
156- String legacyPattern = pattern .replace ('x' , 'X' );
157- if (NANO_PATTERN .matcher (pattern ).find ()) {
158- // If the pattern contains sub-millis, replace 'S' with 'n' for legacy formatters
159- return legacyPattern .replace ('S' , 'n' );
160- }
161159 return legacyPattern ;
162160 }
163161}
0 commit comments