Por que o DateTime.ParseExact () não pode analisar “01/09/2009” usando “M / d / aaaa”

Eu tenho uma string parecida com esta: "9/1/2009". Eu quero convertê-lo em um objeto DateTime (usando C #).

Isso funciona:

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

Mas eu não entendo porque isso não funciona:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

Não há nenhuma palavra na data (como "setembro"), e eu sei o formato específico, então eu prefiro usar ParseExact (e não vejo porque CultureInfo seria necessário). Mas continuo recebendo a temida exceção "String não foi reconhecida como válida por DateTime".

obrigado

Um pouco de acompanhamento. Aqui estão 3 abordagens que funcionam:

DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

E aqui estão 3 que não funcionam:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

Então, Parse () trabalha com "en-US", mas não ParseExact ... Inesperado?

questionAnswers(7)

yourAnswerToTheQuestion