docs: private Strategy getStrategy(final char f, final int width, final Calendar definingCalendar) {
  		switch (f) {
  			default:
  				throw new IllegalArgumentException("Format '" + f + "' not supported");
  			case 'D':
  				return DAY_OF_YEAR_STRATEGY;
  			case 'E':
  				return getLocaleSpecificStrategy(Calendar.DAY_OF_WEEK, definingCalendar);
  			case 'F':
  				return DAY_OF_WEEK_IN_MONTH_STRATEGY;
  			case 'G':
  				return getLocaleSpecificStrategy(Calendar.ERA, definingCalendar);
  			case 'H': // Hour in day (0-23)
  				return HOUR_OF_DAY_STRATEGY;
  			case 'K': // Hour in am/pm (0-11)
  				return HOUR_STRATEGY;
  			case 'M':
  				return width >= 3 ? getLocaleSpecificStrategy(Calendar.MONTH, definingCalendar) : NUMBER_MONTH_STRATEGY;
  			case 'S':
  				return MILLISECOND_STRATEGY;
  			case 'W':
  				return WEEK_OF_MONTH_STRATEGY;
  			case 'a':
  				return getLocaleSpecificStrategy(Calendar.AM_PM, definingCalendar);
  			case 'd':
  				return DAY_OF_MONTH_STRATEGY;
  			case 'h': // Hour in am/pm (1-12), i.e. midday/midnight is 12, not 0
  				return HOUR12_STRATEGY;
  			case 'k': // Hour in day (1-24), i.e. midnight is 24, not 0
  				return HOUR24_OF_DAY_STRATEGY;
  			case 'm':
  				return MINUTE_STRATEGY;
  			case 's':
  				return SECOND_STRATEGY;
  			case 'u':
  				return DAY_OF_WEEK_STRATEGY;
  			case 'w':
  				return WEEK_OF_YEAR_STRATEGY;
  			case 'y':
  			case 'Y':
  				return width > 2 ? LITERAL_YEAR_STRATEGY : ABBREVIATED_YEAR_STRATEGY;
  			case 'X':
  				return ISO8601TimeZoneStrategy.getStrategy(width);
  			case 'Z':
  				if (width == 2) {
  					return ISO8601TimeZoneStrategy.ISO_8601_3_STRATEGY;
  				}
  				//$FALL-THROUGH$
  			case 'z':
  				return getLocaleSpecificStrategy(Calendar.ZONE_OFFSET, definingCalendar);
  		}
  	}