private static Boolean GetYearMonthDayOrder(String datePattern, DateTimeFormatInfo dtfi, out int order)
{
int yearOrder = -1;
int monthOrder = -1;
int dayOrder = -1;
int orderCount = 0;
bool inQuote = false;
for (int i = 0; i < datePattern.Length && orderCount < 3; i++)
{
char ch = datePattern[i];
if (ch == '\'' || ch == '"')
{
inQuote = !inQuote;
}
if (!inQuote)
{
if (ch == 'y')
{
yearOrder = orderCount++;
//
// Skip all year pattern charaters.
//
for(; i+1 < datePattern.Length && datePattern[i+1] == 'y'; i++)
{
// Do nothing here.
}
}
else if (ch == 'M')
{
monthOrder = orderCount++;
//
// Skip all month pattern characters.
//
for(; i+1 < datePattern.Length && datePattern[i+1] == 'M'; i++)
{
// Do nothing here.
}
}
else if (ch == 'd')
{
int patternCount = 1;
//
// Skip all day pattern characters.
//
for(; i+1 < datePattern.Length && datePattern[i+1] == 'd'; i++)
{
patternCount++;
}
//
// Make sure this is not "ddd" or "dddd", which means day of week.
//
if (patternCount <= 2)
{
dayOrder = orderCount++;
}
}
}
}
if (yearOrder == 0 && monthOrder == 1 && dayOrder == 2)
{
order = ORDER_YMD;
return true;
}
if (monthOrder == 0 && dayOrder == 1 && yearOrder == 2)
{
order = ORDER_MDY;
return true;
}
if (dayOrder == 0 && monthOrder == 1 && yearOrder == 2)
{
order = ORDER_DMY;
return true;
}
if (yearOrder == 0 && dayOrder == 1 && monthOrder == 2)
{
order = ORDER_YDM;
return true;
}
order = -1;
return false;
}