2009-08-08 11 views
60

Questa è una domanda un po 'soggettiva, e non molto importante nel grande schema delle cose, ma qualcosa che mi infastidisce regolarmente. Non sembra esserci un modo evidente per inserire un timestamp in un nome file.Qual è il formato di data e ora preferito in un nome file?

Il problema oggettivo è che data/ora nei nomi file deve essere ordinabile. Ma i formati di data ordinabili .NET come "s" ("yyyy-MM-ddTHH:mm:ss") e "u" ("yyyy-MM-dd HH:mm:ssZ") non sono validi nei nomi di file a causa di caratteri ':'.

Un'altra cosa è che si dovrebbe facilmente vedere se tempo universale o locale viene utilizzato. Praticamente, gli utenti sembrano preferire l'ora locale al tempo universale.

ho in gran parte finito per usare ISO 8601 con il formato dell'ora di base:

  • ora locale stringa di formato "yyyy-MM-ddTHHmmsszz"
  • stringa di formato UTC "yyyy-MM-ddTHHmmssZ"

In questi formati mia ore sarebbe "2009-08-08T151800+03" e UTC "2009-08-08T121800Z"

È anche possibile un utodetect the DateTime.Kind con "K" e usa "yyyy-MM-ddTHHmmssK", ma dovrai sostituire i caratteri ':'.

Altri suggerimenti?

Edit: Alcune note finora:

ora + ora locale formato zona "yyyy-MM-ddTHHmmsszz" non è più ordinabile se più fusi orari sono coinvolti. Nella maggior parte dei casi, sarebbe opportuno eliminare le informazioni sul fuso orario se sono ridondanti e utilizzare altrimenti l'UTC.

Un'altra cosa è che l'UTC deve sempre essere contrassegnato con "Z", "GMT" o "UTC" per evitare congetture ed errori.

Julian dates e altri stardates sono freddi perché l'aritmetica delle date con gregorian calendar è il braindead.

+0

sono d'accordo con tutto questo se non che io * non * trovarlo importante nel grande schema delle cose. Il tuo formato è il migliore: utilizzerei anche il fuso orario a 4 cifre come specificato in ISO8601, per adattare le zone non interi. Mi ha sempre infastidito il fatto che ISO8601 non indirizzi il colon vietato nei nomi dei file. – hpekristiansen

+0

Propongo un formato basato su ISO 8601 in un post su http://blog.xam.de/2016/07/standard-format-for-time-stamps-in-file.html - renderebbe il nostro mondo più facile, se potessimo concordare su un formato :-) – xamde

risposta

11

Vorrei usare YYYY-MM-DD HHmmss per nomi di file, a meno che non vi sia una particolare necessità di fusi orari o una possibile necessità di analizzarli in date ISO; in quei casi una data ISO sarebbe probabilmente preferibile.

Modifica: I fusi orari non dovrebbero mai essere richiesti; salvare tutto in UTC e far sapere che è tutto UTC è più efficiente di specificare il fuso orario di tutto.

+5

ouch, spazi nei nomi dei file? –

+7

Cosa c'è di sbagliato negli spazi? – Joey

+25

Sì, gli spazi sono atroci. Traccerò personalmente persone che usano spazi nei nomi dei file e li picchiamo a morte con un bastoncino di sedano bagnato :-) – paxdiablo

26

Io uso questo:

My-File--2009-12-31--23-59-59.txt 
  • Niente spazi
  • doppie trattini per separare i pezzi, rendendo ogni pezzo facile vedere
  • solo un carattere di punteggiatura (trattino) ed è facile da digitare
  • Nessun fuso orario perché per me lavoro sempre nel fuso orario locale; se ne avessi avuto bisogno, andrei con UTC e aggiungerò "--UTC" dopo il tempo.
+2

Faccio all'incirca lo stesso sebbene io * inizi * con il timestamp e poi il file 'my-file' poiché consente di visualizzare i file in ordine cronologico semplicemente ordinando i nomi dei file in ordine alfabetico. – ChristopheD

+2

@ChristopheD: Certo - farei lo stesso in quel caso.Per la mia risposta, stavo pensando al caso in cui si hanno diverse versioni di diversi file e li si vuole raggruppati per nome di file. – RichieHindle

1

Normalmente utilizzo yyyymmdd. Se è necessaria un'ulteriore precisione, cambia in aaaammggahmmss

2

Uso timestamp unix, ad es. quanti secondi passarono dall'epoca. Tutte le volte in UTC. Ma supponiamo che potresti prefisso con i dati del fuso orario se lo desideri.

4

Esiste la necessità che il timestamp sia leggibile dall'uomo? In caso contrario, è sufficiente utilizzare DateTime.Ticks.ToString(). Caratteri molto accurati, ordinabili e non speciali.

+0

Tendo a cercare di rendere tutto leggibile, se possibile. Questo è uno dei grandi valori di schemi come la notazione JSON. Anche se non pensi che debba essere leggibile dall'uomo, non sai mai se vorrai che sia leggibile in seguito. Inoltre, tende a facilitare il debugging. –

+0

Il link non funziona, che cosa è successo? – rbatt

+0

@rbatt Penso che fosse solo un problema temporaneo MSDN - dovrebbe essere tornato ora. –

7

Ecco quello che io 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(); 
    } 

Ci vuole una data e una descrizione. Usiamo "I like DOGS". Risultati in:

ILikeDogs_1999-09-23_18-42

+1

Bel modo per spezzare la data e l'ora e 1 carattere in meno della risposta di @ RichieHindle. – Robino

Problemi correlati