Para quem trabalha com o padrão de comunicação APL/APC, é muito comum que dentro de um arquivo as datas estejam formatadas da seguinte forma: ddMMyyyy (20/07/2010), ou seja, sem as barras ou qualquer outro tipo de separador entre o dia, mês e o ano.
Só que gostaríamos de trazer isso para um DateTime, para assim conseguir manipular melhor a data. Como fazer? Muitos optam pela manipulação da string, via método Substring, etc. Apesar de funcionar, dá um trabalho muito grande. Os métodos Parse da estrutura DateTime ou o ToDateTime da classe Convert, tentam converter a string seguindo o formato especificado pela cultura atual. A cultura geralmente tem uma formatação própria, como por exemplo, a cultura pt-BR é dd/MM/yyyy; já a en-US é MM/dd/yyyy, etc., e se utilizarmos uma dessas técnicas aqui, uma exceção do tipo FormatException é disparada, informando o problema.
Para resolver isso, você pode recorrer ao método ParseExact, também da classe DateTime, que também tem a finalidade de converter uma string em DateTime, mas seguindo uma formatação específica. Ao invocar este método, você deve informar o formato exato em que a data está definida dentro da string, e que no nosso caso é ddMMyyyy:
string data = “20072010”;
DateTime dataDePagamento = DateTime.ParseExact(data, “ddMMyyyy”, null);
Ótima dica Israel. Aproveito para parabenizar e agradecer pelo blog. Seus artigos são muito bons tecnicamente e muito bem escritos. Continue com esses posts de grande utilidade. Valeu !!
Israel,
Parabéns pelo blog, é a primeira vez que comento alguma coisa. Tenho lido seus posts já há algum tempo (inclusive nos fóruns do MSDN). Os assuntos são muito interessantes e muito bem apresentados.
Em relação ao post "Parse de Datas", acho que só faltou comentar sobre o método TryParseExact.
Um abraço !
Ari
Boas Ari,
Obrigado pelo comentário.
O método TryParseExact tem a mesma finalidade, nas ao invés de disparar uma exceção quando o parser não for possível, o método retornará False e você avalia este retorno para determinar se a data é válida ou não.
O valor convertido é retornado através de de um parâmetro de saída.