Sono veramente soddisfatto quando vedo che con una riga di codice si risolve uno dei problemi più macchinosi dell'informatica la gestione delle date rappresentate come stringhe, cambiare formati, validarne l'esattezza, il problema spinoso del cambio di formato; se fosse per me sarebbe tutto yyyyMMdd (ad esempio quando in SQL Server devi eseguire una Query su un campo Date puoi passarglielo come stringa racchiuso tra '' a patto di utilizzare il formato 'yyyyMMdd [HH:mm:ss[.millisecondi]]' ISO, attenzione alla precisione del campo Date con i millisecondi; invece guardando il Profiler quando usi il provider .NET con i Parameter le date vengono passate con un formato verboso ma avranno i loro motivi).
Siccome io non detto ancora gli standard :) viviamo immersi tra le più disparate rappresentazioni tutte magnificamente mappabili con la funzione statica ParseExact
Oggi mi sono trovato in uno dei casi di maggiore complessità (mesi scritti con lettere) ed ho pensato di fare questo post principalmente per promemoria
System.Globalization.CultureInfo dit = new System.Globalization.CultureInfo("it-IT");
DateTime dData = DateTime.ParseExact(sData, "dd MMMM yyyy", dit.DateTimeFormat, System.Globalization.DateTimeStyles.AllowInnerWhite);
sData = dData.ToString("yyyyMMdd");
sData = dData.ToString("dd/MM/yyyy");
Ad esempio con questi parametri ParseExact valida date
6 OttOBRE 1977
10 Aprile 1977
Si deve tenere presente le singole parti di questa funzione:
1) Specificare la Culture per la codifica dei mesi altrimenti utilizza quella di default del sistema (principale problema per cui sulla tua macchina(italiano) funziona e sui server(inglesi) no... Anche questo argomento meriterebbe un post... Mettiamo tutto in Inglese o tutto in Italiano :) e no... sarebbe tutto troppo facile)
2) System.Globalization.DateTimeStyles.AllowInnerWhite permette di validare date con spazi sistemati a caso nella data
Ciao
Allino