Recentemente ho avuto la necessità di intervenire per fare una fix su una procedura per il parsing di una data a partire da una stringa, in quanto con il metodo scelto, a seconda della cultura impostata sul sistema, la data veniva interpretata generando una pericolosa inversione del mese e del giorno, nel caso di conversione effettuata su un sistema con cultura inglese us.

Ho utilizzato quindi il metodo DateTime.TryParseExact che in questo caso si è rivelato potente è flessibile, in quanto da un lato la versione TryParse permette di evitare le eccezioni potendo verificare il risultato dell'operazione dal parametro di ritorno, inoltre permette di avere un controllo preciso sul formato potendo definire i pattern di riconoscimento della data, con un ulteriore livello di libertà dato dalle opzioni del parametro DateTimeStyles.

    public class Parser

    {

        public static DateTime? ParseDateStr(string str)

        {

            DateTime dtParsed;

 

            bool result = DateTime.TryParseExact(

                str,

                new[] { "dd/MM/yyyy", "dd-MM-yyyy" },

                null,

                DateTimeStyles.AllowWhiteSpaces,

                out dtParsed);

 

            if (result)

                return dtParsed;

 

            return null;

        }

    }

 

Con l'utilizzo mostrato sopra vengono riconosciute, in modo indipendente dalla cultura locale, date con questi formati

 

 "01/01/2010"

 "01-05-2010"

 "   31-12-2010"

 "01/01/2010   "

 " 31-12-2010 "