DateTime.ParseExact com 7 dígitos / mês de um ou dois dígitos

Até agora eu pensava que entenderia comoDateTime.ParseExact funciona, mas isso é confuso. Por que a seguinte linha retornafalse?

DateTime.TryParseExact("2013122", "yyyyMdd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out lastUpdate)

O mês também pode ter dois dígitos. Na minha opinião, ele deve entender que isso significa 22 de janeiro de 2013. Por que estou no caminho errado? Perdi alguma coisa ou há uma solução fácil?

Enquanto isso, estou usando esta solução alternativa que não é muito elegante, mas funciona:

public static DateTime? ParseDate_yyyyMdd(String date)
{
    if (date == null)
        return null;
    date = date.Trim();
    if (date.Length < 7)
        return null;
    if (date.Length == 7)
        date = date.Insert(4, "0");
    DateTime dt;
    if (DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt))
        return dt;
    return null;
}

Dá o resultado desejado:

DateTime? date = ParseDate_yyyyMdd("2013122");
Console.Write(date.ToString()); // 01/22/2013

No entanto, ainda estou interessado no motivo dessa limitação. Talvez alguém também tenha uma abordagem melhor.

questionAnswers(3)

yourAnswerToTheQuestion