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.
Respostas:
Eu uso isso:
My-File--2009-12-31--23-59-59.txt
--UTC
" após o horário.fonte
_
) em vez do traço duplo para separar as peças. (por exemploMy-File_2009-12-31_23-59-59.txt
)name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.ext
está ok para o shell do Linux. Sem fuso horário, mas com precisão de nanossegundos.Eu usaria
YYYY-MM-DD HHmmss
para nomes de arquivo, a menos que haja uma necessidade específica de fusos horários ou uma possível necessidade de analisá-los em datas ISO; nesses casos, uma data ISO provavelmente seria preferível.Edit: Os fusos horários realmente não devem ser necessários; salvar tudo em UTC e deixar as pessoas saberem que é tudo UTC é mais eficiente do que especificar o fuso horário de tudo.
fonte
T
, mas isso é menos natural quando você lê.Aqui está o que eu uso:
private static string CreateMeaningfulFileName(string friendlyName, DateTime date) { StringBuilder sb = new StringBuilder(); foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces { sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment } sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date return sb.ToString(); }
Leva uma data e uma descrição. Vamos usar "I like DOGS". Resulta em:
ILikeDogs_1999-09-23_18-42
fonte
Existe um requisito para que o carimbo de data / hora seja legível por humanos? Caso contrário, você pode apenas usar DateTime.Ticks.ToString () . Muito preciso, classificável e sem caracteres especiais.
fonte
Normalmente eu uso aaaammdd. Se for necessária mais precisão, ele muda para aaaammddhhmmss
fonte
Eu uso carimbos de data / hora Unix, por exemplo. quantos segundos se passaram desde a época. Todos os horários em UTC. Mas acho que você pode prefixar os dados de fuso horário, se desejar.
fonte