Qual é o seu formato de data e hora favorito em um nome de arquivo? [fechadas]

88

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.

mika
fonte
2
Concordo com tudo isso, exceto que eu não encontrá-lo importante no grande esquema das coisas. Seu formato é o melhor - eu até usaria um fuso horário de 4 dígitos, conforme especificado em ISO8601, para acomodar zonas não inteiras. Sempre me incomodou que a ISO8601 não aborda os dois pontos proibidos em nomes de arquivo.
hpekristiansen
Proponho um formato baseado em ISO 8601 em um post em blog.xam.de/2016/07/… - tornaria nosso mundo mais fácil, se pudéssemos concordar com um formato :-)
Dr. Max Völkel
"fechado como não construtivo" ?? Existem razões a favor e contra todas as propostas, por isso é construtivo. Não há necessidade de se esquivar de uma pergunta sobre os detalhes filosóficos mais sutis da nomenclatura de arquivos: D
tanius

Respostas:

57

Eu uso isso:

My-File--2009-12-31--23-59-59.txt
  • Sem espaços
  • Traços duplos para separar as peças, tornando cada peça fácil de ver
  • Apenas um caractere de pontuação (traço), facilitando a digitação
  • Sem fuso horário porque para mim estou sempre trabalhando no meu fuso horário local; se eu precisasse de um, usaria o UTC e acrescentaria " --UTC" após o horário.
RichieHindle
fonte
5
Eu faço aproximadamente o mesmo, embora eu comece com o carimbo de data / hora e depois com as coisas de 'meu-arquivo', pois isso permite que se visualize os arquivos em ordem cronológica, apenas ordenando os nomes de arquivo em ordem alfabética.
ChristopheD
2
@ChristopheD: Claro - eu faria o mesmo nesse caso. Para minha resposta, estava pensando no caso em que você tem várias versões de vários arquivos diferentes e os quer agrupados por nome de arquivo.
RichieHindle
2
Pessoalmente, prefiro usar o sublinhado ( _) em vez do traço duplo para separar as peças. (por exemplo My-File_2009-12-31_23-59-59.txt)
Elie G.
A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extestá ok para o shell do Linux. Sem fuso horário, mas com precisão de nanossegundos.
Ivan Black
14

Eu usaria YYYY-MM-DD HHmmsspara 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.

Você
fonte
9
ai, espaços em seus nomes de arquivo?
Saggi Malachi
10
O que há de errado com espaços?
Joey
41
Sim, os espaços são hediondos. Vou rastrear pessoalmente as pessoas que usam espaços nos nomes de arquivos e espancá-las até a morte com um pedaço de aipo molhado :-)
paxdiablo
1
@Saggi; bem, provavelmente eu merecia esse, mas sério - mostre-me um sistema que não lida com nomes de arquivos com espaços? Pelo que pude perceber, não havia URIs envolvidos e, portanto, não me preocupo muito com espaços. Você pode, é claro, trocar esse espaço por outra coisa, como um sublinhado ou T, mas isso é menos natural quando você lê.
Você em
1
Vou votar neste (mas nunca usaria espaços), sendo o motivo do ano de 4 dígitos que adiará o problema y2k1 (mas não o de y10k, mas quem realmente se importa com isso?).
paxdiablo
8

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

N-ate
fonte
1
Ótima maneira de quebrar a data e a hora e 1 caractere a menos do que a resposta de @RichieHindle.
Robino
3

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.

Dan Diplo
fonte
1
Eu tendo a tentar tornar tudo legível para humanos, se possível. Este é um dos grandes valores de esquemas como a notação JSON. Mesmo que você ache que não precisa ser legível por humanos, você nunca sabe se vai querer que seja legível por humanos mais tarde. Além disso, tende a facilitar a depuração.
Edan Maor
O link está fora do ar, para onde ele vai?
rbatt 02 de
@rbatt Acho que foi apenas um problema temporário do MSDN - deve estar de volta agora.
Dan Diplo
2

Normalmente eu uso aaaammdd. Se for necessária mais precisão, ele muda para aaaammddhhmmss

Carlton Jenke
fonte
1

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.

Jinzo
fonte