in src/main/cpp/simpledateformat.cpp [648:768]
void SimpleDateFormat::addToken(const logchar spec, const int repeat, const std::locale* locale,
std::vector < PatternToken* >& pattern )
{
PatternToken* token = NULL;
switch ( spec )
{
case 0x47: // 'G'
token = ( new EraToken( repeat, locale ) );
break;
case 0x79: // 'y'
token = ( new YearToken( repeat ) );
break;
case 0x4D: // 'M'
if ( repeat <= 2 )
{
token = ( new MonthToken( repeat ) );
}
else if ( repeat <= 3 )
{
token = ( new AbbreviatedMonthNameToken( repeat, locale ) );
}
else
{
token = ( new FullMonthNameToken( repeat, locale ) );
}
break;
case 0x77: // 'w'
token = ( new WeekInYearToken( repeat ) );
break;
case 0x57: // 'W'
token = ( new WeekInMonthToken( repeat ) );
break;
case 0x44: // 'D'
token = ( new DayInYearToken( repeat ) );
break;
case 0x64: // 'd'
token = ( new DayInMonthToken( repeat ) );
break;
case 0x46: // 'F'
token = ( new DayOfWeekInMonthToken( repeat ) );
break;
case 0x45: // 'E'
if ( repeat <= 3 )
{
token = ( new AbbreviatedDayNameToken( repeat, locale ) );
}
else
{
token = ( new FullDayNameToken( repeat, locale ) );
}
break;
case 0x61: // 'a'
token = ( new AMPMToken( repeat, locale ) );
break;
case 0x48: // 'H'
token = ( new MilitaryHourToken( repeat, 0 ) );
break;
case 0x6B: // 'k'
token = ( new MilitaryHourToken( repeat, 1 ) );
break;
case 0x4B: // 'K'
token = ( new HourToken( repeat, 0 ) );
break;
case 0x68: // 'h'
token = ( new HourToken( repeat, 1 ) );
break;
case 0x6D: // 'm'
token = ( new MinuteToken( repeat ) );
break;
case 0x73: // 's'
token = ( new SecondToken( repeat ) );
break;
case 0x53: // 'S'
if ( repeat == 6 )
{
token = ( new MicrosecondToken( repeat ) );
}
else
{
// It would be nice to support patterns with arbitrary
// subsecond precision (like "s.S" or "s.SSSS"), but we
// don't; so this is a back-compatible default.
token = ( new MillisecondToken( repeat ) );
}
break;
case 0x7A: // 'z'
token = ( new GeneralTimeZoneToken( repeat ) );
break;
case 0x5A: // 'Z'
token = ( new RFC822TimeZoneToken( repeat ) );
break;
default:
token = ( new LiteralToken( spec, repeat ) );
}
assert( token != NULL );
pattern.push_back( token );
}