@@ -1937,7 +1937,7 @@ private void parsePattern(String pattern) {
19371937 padNext (pad ); // pad and continue parsing
19381938 }
19391939 // main rules
1940- TemporalField field = FIELD_MAP . get (cur );
1940+ TemporalField field = getField (cur );
19411941 if (field != null ) {
19421942 parseField (cur , count , field );
19431943 } else if (cur == 'z' ) {
@@ -2185,48 +2185,55 @@ private void parseField(char cur, int count, TemporalField field) {
21852185 }
21862186 }
21872187
2188- /** Map of letters to fields. */
2189- private static final Map <Character , TemporalField > FIELD_MAP = new HashMap <>();
2190- static {
2188+ /**
2189+ * Returns the TemporalField for the given pattern character.
2190+ *
2191+ * @param ch the pattern character
2192+ * @return the TemporalField for the given pattern character, or null if not applicable
2193+ */
2194+ private static TemporalField getField (char ch ) {
21912195 // SDF = SimpleDateFormat
2192- FIELD_MAP .put ('G' , ChronoField .ERA ); // SDF, LDML (different to both for 1/2 chars)
2193- FIELD_MAP .put ('y' , ChronoField .YEAR_OF_ERA ); // SDF, LDML
2194- FIELD_MAP .put ('u' , ChronoField .YEAR ); // LDML (different in SDF)
2195- FIELD_MAP .put ('Q' , IsoFields .QUARTER_OF_YEAR ); // LDML (removed quarter from 310)
2196- FIELD_MAP .put ('q' , IsoFields .QUARTER_OF_YEAR ); // LDML (stand-alone)
2197- FIELD_MAP .put ('M' , ChronoField .MONTH_OF_YEAR ); // SDF, LDML
2198- FIELD_MAP .put ('L' , ChronoField .MONTH_OF_YEAR ); // SDF, LDML (stand-alone)
2199- FIELD_MAP .put ('D' , ChronoField .DAY_OF_YEAR ); // SDF, LDML
2200- FIELD_MAP .put ('d' , ChronoField .DAY_OF_MONTH ); // SDF, LDML
2201- FIELD_MAP .put ('F' , ChronoField .ALIGNED_WEEK_OF_MONTH ); // SDF, LDML
2202- FIELD_MAP .put ('E' , ChronoField .DAY_OF_WEEK ); // SDF, LDML (different to both for 1/2 chars)
2203- FIELD_MAP .put ('c' , ChronoField .DAY_OF_WEEK ); // LDML (stand-alone)
2204- FIELD_MAP .put ('e' , ChronoField .DAY_OF_WEEK ); // LDML (needs localized week number)
2205- FIELD_MAP .put ('a' , ChronoField .AMPM_OF_DAY ); // SDF, LDML
2206- FIELD_MAP .put ('H' , ChronoField .HOUR_OF_DAY ); // SDF, LDML
2207- FIELD_MAP .put ('k' , ChronoField .CLOCK_HOUR_OF_DAY ); // SDF, LDML
2208- FIELD_MAP .put ('K' , ChronoField .HOUR_OF_AMPM ); // SDF, LDML
2209- FIELD_MAP .put ('h' , ChronoField .CLOCK_HOUR_OF_AMPM ); // SDF, LDML
2210- FIELD_MAP .put ('m' , ChronoField .MINUTE_OF_HOUR ); // SDF, LDML
2211- FIELD_MAP .put ('s' , ChronoField .SECOND_OF_MINUTE ); // SDF, LDML
2212- FIELD_MAP .put ('S' , ChronoField .NANO_OF_SECOND ); // LDML (SDF uses milli-of-second number)
2213- FIELD_MAP .put ('A' , ChronoField .MILLI_OF_DAY ); // LDML
2214- FIELD_MAP .put ('n' , ChronoField .NANO_OF_SECOND ); // 310 (proposed for LDML)
2215- FIELD_MAP .put ('N' , ChronoField .NANO_OF_DAY ); // 310 (proposed for LDML)
2216- FIELD_MAP .put ('g' , JulianFields .MODIFIED_JULIAN_DAY );
2217- // 310 - z - time-zone names, matches LDML and SimpleDateFormat 1 to 4
2218- // 310 - Z - matches SimpleDateFormat and LDML
2219- // 310 - V - time-zone id, matches LDML
2220- // 310 - v - general timezone names, not matching exactly with LDML because LDML specify to fall back
2221- // to 'VVVV' if general-nonlocation unavailable but here it's not falling back because of lack of data
2222- // 310 - p - prefix for padding
2223- // 310 - X - matches LDML, almost matches SDF for 1, exact match 2&3, extended 4&5
2224- // 310 - x - matches LDML
2225- // 310 - w, W, and Y are localized forms matching LDML
2226- // LDML - B - day periods
2227- // LDML - U - cycle year name, not supported by 310 yet
2228- // LDML - l - deprecated
2229- // LDML - j - not relevant
2196+ return switch (ch ) {
2197+ case 'G' -> ChronoField .ERA ; // SDF, LDML (different to both for 1/2 chars)
2198+ case 'y' -> ChronoField .YEAR_OF_ERA ; // SDF, LDML
2199+ case 'u' -> ChronoField .YEAR ; // LDML (different in SDF)
2200+ case 'Q' -> IsoFields .QUARTER_OF_YEAR ; // LDML (removed quarter from 310)
2201+ case 'q' -> IsoFields .QUARTER_OF_YEAR ; // LDML (stand-alone)
2202+ case 'M' -> ChronoField .MONTH_OF_YEAR ; // SDF, LDML
2203+ case 'L' -> ChronoField .MONTH_OF_YEAR ; // SDF, LDML (stand-alone)
2204+ case 'D' -> ChronoField .DAY_OF_YEAR ; // SDF, LDML
2205+ case 'd' -> ChronoField .DAY_OF_MONTH ; // SDF, LDML
2206+ case 'F' -> ChronoField .ALIGNED_WEEK_OF_MONTH ; // SDF, LDML
2207+ case 'E' -> ChronoField .DAY_OF_WEEK ; // SDF, LDML (different to both for 1/2 chars)
2208+ case 'c' -> ChronoField .DAY_OF_WEEK ; // LDML (stand-alone)
2209+ case 'e' -> ChronoField .DAY_OF_WEEK ; // LDML (needs localized week number)
2210+ case 'a' -> ChronoField .AMPM_OF_DAY ; // SDF, LDML
2211+ case 'H' -> ChronoField .HOUR_OF_DAY ; // SDF, LDML
2212+ case 'k' -> ChronoField .CLOCK_HOUR_OF_DAY ; // SDF, LDML
2213+ case 'K' -> ChronoField .HOUR_OF_AMPM ; // SDF, LDML
2214+ case 'h' -> ChronoField .CLOCK_HOUR_OF_AMPM ; // SDF, LDML
2215+ case 'm' -> ChronoField .MINUTE_OF_HOUR ; // SDF, LDML
2216+ case 's' -> ChronoField .SECOND_OF_MINUTE ; // SDF, LDML
2217+ case 'S' -> ChronoField .NANO_OF_SECOND ; // LDML (SDF uses milli-of-second number)
2218+ case 'A' -> ChronoField .MILLI_OF_DAY ; // LDML
2219+ case 'n' -> ChronoField .NANO_OF_SECOND ; // 310 (proposed for LDML)
2220+ case 'N' -> ChronoField .NANO_OF_DAY ; // 310 (proposed for LDML)
2221+ case 'g' -> JulianFields .MODIFIED_JULIAN_DAY ;
2222+ default -> null ;
2223+ // 310 - z - time-zone names, matches LDML and SimpleDateFormat 1 to 4
2224+ // 310 - Z - matches SimpleDateFormat and LDML
2225+ // 310 - V - time-zone id, matches LDML
2226+ // 310 - v - general timezone names, not matching exactly with LDML because LDML specify to fall back
2227+ // to 'VVVV' if general-nonlocation unavailable but here it's not falling back because of lack of data
2228+ // 310 - p - prefix for padding
2229+ // 310 - X - matches LDML, almost matches SDF for 1, exact match 2&3, extended 4&5
2230+ // 310 - x - matches LDML
2231+ // 310 - w, W, and Y are localized forms matching LDML
2232+ // LDML - B - day periods
2233+ // LDML - U - cycle year name, not supported by 310 yet
2234+ // LDML - l - deprecated
2235+ // LDML - j - not relevant
2236+ };
22302237 }
22312238
22322239 //-----------------------------------------------------------------------
0 commit comments