Esta é uma questão um tanto subjetiva, e não muito importante no grande esquema das coisas, mas algo que ainda me irrita regularmente. Parece não haver uma maneira evidente de colocar um carimbo de data / hora em um nome de arquivo .
O problema objetivo é que os carimbos de data / hora nos nomes dos arquivos devem ser classificáveis . Mas os formatos de data classificáveis do .NET como "s" ( "yyyy-MM-ddTHH:mm:ss"
) e "u" ( "yyyy-MM-dd HH:mm:ssZ"
) não são válidos em nomes de arquivo por causa dos caracteres ':'.
Outra coisa é que você deve ver facilmente se a hora universal ou local é usada. Praticamente, os usuários parecem preferir o horário local ao universal.
Acabei principalmente usando ISO 8601 com formato de hora básico:
- String de formato de hora local
"yyyy-MM-ddTHHmmsszz"
- String de formato UTC
"yyyy-MM-ddTHHmmssZ"
Nestes formatos, minha hora local atual seria "2009-08-08T151800+03"
e UTC"2009-08-08T121800Z"
Você também pode detectar automaticamente o DateTime.Kind com "K" e usar "yyyy-MM-ddTHHmmssK"
, mas então você terá que substituir os caracteres ':'.
Alguma outra sugestão?
Editar: Algumas notas até agora:
formato de hora local + fuso horário "yyyy-MM-ddTHHmmsszz"
não é mais classificável se vários fusos horários estiverem envolvidos. Na maioria dos casos, faria sentido ignorar as informações de fuso horário se forem redundantes e usar o UTC de outra forma.
Outra coisa é que UTC deve ser sempre marcado com 'Z', 'GMT' ou 'UTC' para evitar suposições e erros.
Datas julianas e outras datas estelares são legais porque a aritmética de datas com o calendário gregoriano é uma tarefa complicada.