@@ -583,6 +583,7 @@ public SimpleDateFormat(String pattern, Locale locale, boolean allowNull) {
583583 this .pattern = pattern ;
584584 this .locale = locale ;
585585 this .isSimpleMMDDYY = isSimple (pattern , locale );
586+ this .isISO8601 = pattern .startsWith ("yyyy-MM-dd'T'HH:mm:ss" );
586587 // lazy calendar initialization for SwingJS
587588 // avoids loading 49 classes!
588589// this.formatData = DateFormatSymbols.getInstance(locale);
@@ -594,6 +595,8 @@ public SimpleDateFormat(String pattern, Locale locale, boolean allowNull) {
594595
595596 /* Initialize compiledPattern and numberFormat fields */
596597 private void initializeLocale () {
598+ if (this .isSimpleMMDDYY || this .isISO8601 )
599+ return ;
597600 if (locale == null )
598601 locale = Locale .getDefault ();
599602 // Verify and compile the given pattern.
@@ -622,11 +625,10 @@ private static NumberFormat getCachedNumberFormatData(Locale key) {
622625
623626 @ Override
624627 public Calendar getCalendar () {
625- Calendar cal = super .getCalendar ();
626- if (cal == null ) {
628+ if (super .getCalendar () == null ) {
627629 initializeCalendar ();
628630 }
629- return cal ;
631+ return calendar ;
630632 }
631633
632634 private void initializeCalendar () {
@@ -894,11 +896,11 @@ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos
894896 return format (date , toAppendTo , pos .getFieldDelegate ());
895897 }
896898
897- @ Override
898- public final String format (Object obj ) {
899- return format (obj , new StringBuffer (), isSimpleMMDDYY ? null : new FieldPosition (0 )).toString ();
900- }
901-
899+ @ Override
900+ public final String format (Object obj ) {
901+ return format (obj , new StringBuffer (), isSimpleMMDDYY ? null : new FieldPosition (0 )).toString ();
902+ }
903+
902904 @ Override
903905 public String format (Date date ) {
904906 if (isSimpleMMDDYY ) {
@@ -923,8 +925,8 @@ private boolean isSimple(String pattern, Locale locale) {
923925 switch (ch ) {
924926 case 'M' :
925927 case 'd' :
926- case 'H' : // H Hour in day (0-23)
927- case 'k' : // k Hour in day (1-24)
928+ case 'H' : // H Hour in day (0-23)
929+ case 'k' : // k Hour in day (1-24)
928930 case 'y' :
929931 case 'h' :
930932 case 'm' :
@@ -940,27 +942,29 @@ private boolean isSimple(String pattern, Locale locale) {
940942
941943 // toISOString() returns a string in the
942944 // 1970-01-01T00:00:00.000Z
943- // 0.........1.........
945+ // 0.........1.........
944946 // 01234567890123456789
945947 //
946- //new Date().toString()
948+ // new Date().toString()
947949 // Sun Mar 09 14:35:53 GMT-0500 2025"
948- // 0.........1.........
950+ // 0.........1.........
949951 // 01234567890123456789
950- private final static String [] fields = { "yyyy" , "yy" , "MM" , "M" , "dd" , "d" , "hh" , "h" , "HH" , "H" , "kk" , "k" , "mm" , "m" , "ss" , "s" };
951- private final static int [] fieldlens = { 4 , 2 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 };
952- private final static int [] fieldzero = { 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 };
953- private final static int [] adj = { 0 , 0 , 3 , 3 , 0 , 0 , 12 , 12 , 23 , 23 , 24 , 24 , 0 , 0 , 0 , 0 };
954- private final static int [] isopts = { 0 , 2 , 5 , 5 , 8 , 8 , 11 , 11 , 11 , 11 , 11 , 11 , 14 , 14 , 17 , 17 };
955- private final static int [] isolens = { 4 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
956- private final static int [] locpts = { -4 , -2 , 4 , 4 , 8 , 8 , 11 , 11 , 11 , 11 , 11 , 11 , 14 , 14 , 17 , 17 };
957- private final static int [] loclens = { 4 , 2 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
952+ private final static String [] fields = { "yyyy" , "yy" , "MM" , "M" , "dd" , "d" , "hh" , "h" , "HH" , "H" , "kk" , "k" , "mm" ,
953+ "m" , "ss" , "s" };
954+ private final static int [] fieldlens = { 4 , 2 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 };
955+ private final static int [] fieldzero = { 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 };
956+ private final static int [] adj = { 0 , 0 , 3 , 3 , 0 , 0 , 12 , 12 , 23 , 23 , 24 , 24 , 0 , 0 , 0 , 0 };
957+ private final static int [] isopts = { 0 , 2 , 5 , 5 , 8 , 8 , 11 , 11 , 11 , 11 , 11 , 11 , 14 , 14 , 17 , 17 };
958+ private final static int [] isolens = { 4 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
959+ private final static int [] locpts = { -4 , -2 , 4 , 4 , 8 , 8 , 11 , 11 , 11 , 11 , 11 , 11 , 14 , 14 , 17 , 17 };
960+ private final static int [] loclens = { 4 , 2 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
958961 private final static int fieldCount = fields .length ;
959962
960963 private Object formatSimpleJS (Date date , StringBuffer sb ) {
961964 // considered doing this -- still could if we want GMT
962- //String iso = (/** @j2sNative date.toISOString() || */"");
963- String loc = (/** @j2sNative date.toString() || */ "" );
965+ // String iso = (/** @j2sNative date.toISOString() || */"");
966+ String loc = (/** @j2sNative date.toString() || */
967+ "" );
964968 String ret = pattern ;
965969 for (int i = 0 , l = 2 ; i < fieldCount ; i ++, l = 3 - l ) {
966970 int pt = ret .indexOf (fields [i ]);
@@ -980,7 +984,7 @@ private String rep(String p, int pt, int flen, int fzero, String iso, int i0, in
980984 String v = (i0 < 0 ? iso .substring (iso .length () + i0 ) : iso .substring (i0 , i0 + isolen ));
981985 int iv = -1 ;
982986 if (isoadj == 3 ) {
983- iv = (months .indexOf (v )/ 3 + 1 );
987+ iv = (months .indexOf (v ) / 3 + 1 );
984988 } else if (isoadj != 0 ) {
985989 iv = Integer .parseInt (v );
986990 switch (isoadj ) {
@@ -1085,17 +1089,19 @@ public AttributedCharacterIterator formatToCharacterIterator(Object obj) {
10851089
10861090 // Maps from DecimalFormatSymbols index to Field constant
10871091 private static Field [] PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID ;
1088-
1092+
10891093 private static Field [] getPatternIndexFieldIDs () {
10901094 if (PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID == null ) {
10911095 PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID = new Field [] { Field .ERA , Field .YEAR , Field .MONTH ,
1092- Field .DAY_OF_MONTH , Field .HOUR_OF_DAY1 , Field .HOUR_OF_DAY0 , Field .MINUTE , Field .SECOND , Field .MILLISECOND ,
1093- Field .DAY_OF_WEEK , Field .DAY_OF_YEAR , Field .DAY_OF_WEEK_IN_MONTH , Field .WEEK_OF_YEAR , Field .WEEK_OF_MONTH ,
1094- Field .AM_PM , Field .HOUR1 , Field .HOUR0 , Field .TIME_ZONE , Field .TIME_ZONE , };
1096+ Field .DAY_OF_MONTH , Field .HOUR_OF_DAY1 , Field .HOUR_OF_DAY0 , Field .MINUTE , Field .SECOND ,
1097+ Field .MILLISECOND , Field .DAY_OF_WEEK , Field .DAY_OF_YEAR , Field .DAY_OF_WEEK_IN_MONTH ,
1098+ Field .WEEK_OF_YEAR , Field .WEEK_OF_MONTH , Field .AM_PM , Field .HOUR1 , Field .HOUR0 , Field .TIME_ZONE ,
1099+ Field .TIME_ZONE , };
10951100 }
1096- return PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID ;
1097-
1101+ return PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID ;
1102+
10981103 }
1104+
10991105 /**
11001106 * Private member function that does the real date/time formatting.
11011107 */
0 commit comments