Ho una stringa di data che sta arrivando come quello che ritengo essere Mddyyyy. Tuttavia, TryParseExact non sembra funzionare. Ecco il codice di esempio che non riesce:Perché una chiamata a DateTime.TryParseEx non riesce con l'input "1212012" utilizzando la stringa di formato "Mddyyyy"
string datestring = "1212012";
DateTime td;
if (DateTime.TryParseExact(datestring, "Mddyyyy", new CultureInfo("en-US"), DateTimeStyles.None, out td))
{
Console.WriteLine(td.ToShortDateString());
}
else
{
Console.WriteLine("Invalid Date String");
}
Lo stesso codice funziona se c'è uno zero, ma potrebbe pensare allora che lo zero potrebbe funzionare solo con una stringa di formattazione di MMGGAAAA.
Suggerimento: il tuo esempio è datato 21 gennaio 2012 o 1 dicembre 2012? Inoltre, apprezziamo la vera domanda nel tuo post (anche se penso che sia sicuro supporre che stai chiedendo "Come faccio a provare TryParseExact analizzare questa data?") –
Vedo l'ambiguità, ma ciò significa che le date di gennaio con giorni in l'intervallo 10-29 è inaccessibile per DateTime quando viene fornito nel formato Mddyyyy? Mi rendo conto che non dovresti usare questo formato per le date, ma sono curioso. – Odrade
Molto probabilmente sì. Puoi sistemarlo imbottendo a sinistra con zero. Il motivo probabile è la struttura del parser o dell'espressione regolare utilizzata da TryParseExact. Il primo M implica un numero variabile di cifre iniziali che specificano il mese, con un percorso decisionale corretto che è conoscibile solo osservando la lunghezza totale della stringa. Scommetto che il parser non è così sofisticato, anche se ammetto che non ho guardato. –