Strings de formatação de DateTime em C# (VB)

2008-09-02

É uma tarefa comum formatar instâncias de data e hora nas aplicações para correcto armazenamento ou apresentação. Felizmente, o objecto DateTime tem na sua definição métodos que permitem formatar o valor nos mais diversos formatos, o que simplifica o processo de apresentação de valores, mas não só. Por exemplo, numa base de dados SQLite (e não só), é conveniente enviar o valor da data e hora no formato correcto, para evitar erros nas operações.

O DateTime, como a generalidade das classes do framework, tem um método de ToString(), com diversos overloads, onde um deles é:

Este método admite uma string de formatação do valor que retorna, no formato de string. Se bem que a construção da string não é de todo difícil, é importante escolher a correcta e ter o cuidado de não confundir alguns casos de maiúsculas e minúsculas. Produzi um pequeno exemplo no Snippet Compiler para demonstrar o conceito, e as diferenças entre cada caracter ou combinação:

Naturalmente, dada a especificidade dos nomes dos dias e meses, e mesmo a formatação das horas, os valores retornados pelo ToString() depende fortemente do da informação de cultura definido no System.Globalization do sistema onde corre as instruções. Este caso é para Português de Portugal.

Revendo o exemplo:

  • Sem parmetro de formatação, obtemos um valor de data e hora perfeitamente valido para uso comum.
  • Existe um conjunto de caracteres singulares que produzem uma data e hora completa. Dessas, apenas o ‘s’ e o ‘u’ produzem saídas ordenáveis.
  • O ‘U’ tem comportamento estranho e deve ser evitado.
  • Os componentes individuais tem diversas formatações possíveis, dependendo do número de vezes que o caracter é usado.
  • ‘f’ representa fracções de segundo. Cada ‘f’ acrescentado representa uma casa decimal extra na representação
  • É muito importante não confundir ‘M’ de meses com ‘m’ de minutos. É um erro que nem sempre é fácil de detectar ou cujo resultado é evidentemente errado.
  • É possível combinar os parâmetros de modo a criar novos que nos sirvam. Como separadores, podem ser usados o mais diversos caracteres, como espaços, dois pontos, barras, ou palavras. No caso de palavras, quando contem caracteres já definidos para formatação (como o ‘d’, o ‘m’, etc.) é importante envolver o(s) caracter(es) em aspas como ‘às’. Basta envolver caracter crítico (como à’s’) mas é mais legível envolver a palavra completa.

E assim fica. Para consultar mais info sobre o assunto, o Steve Tibbett tem no blog uma página dedicado a formatação com strings, incluindo outros tipos de dados, e há sempre a documentação da MSDN.