Qual è il tuo formato di data e ora preferito in un nome di file? [chiuso]


90

Questa è una domanda in qualche modo soggettiva, e non molto importante nel grande schema delle cose, ma qualcosa che ancora mi infastidisce regolarmente. Non sembra esserci un modo evidente per inserire un timestamp in un nome di file .

Il problema oggettivo è che i timestamp nei nomi dei file dovrebbero essere ordinabili . 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 dei caratteri ":".

Un'altra cosa è che dovresti vedere facilmente se viene utilizzata l' ora universale o locale . In pratica, gli utenti sembrano preferire l'ora locale all'ora universale.

Per lo più ho finito per utilizzare ISO 8601 con il formato dell'ora di base:

  • Stringa del formato dell'ora locale "yyyy-MM-ddTHHmmsszz"
  • Stringa di formato UTC "yyyy-MM-ddTHHmmssZ"

In questi formati la mia ora locale attuale sarebbe "2009-08-08T151800+03"e UTC"2009-08-08T121800Z"

Puoi anche rilevare automaticamente DateTime.Kind con "K" e usarlo "yyyy-MM-ddTHHmmssK", ma poi dovrai sostituire i caratteri ":".

Qualche altro suggerimento?

Modifica: alcune note finora:

Il formato ora locale + fuso orario "yyyy-MM-ddTHHmmsszz"non è più ordinabile se sono coinvolti più fusi orari. Nella maggior parte dei casi avrebbe senso eliminare le informazioni sul fuso orario se è ridondante e utilizzare UTC in caso contrario.

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

Le date giuliane e altre date stellari sono interessanti perché l'aritmetica delle date con il calendario gregoriano è testa di leone.


2
Sono d'accordo con tutto questo se non che io non trovo importante nel grande schema delle cose. Il tuo formato è il migliore: userei anche il fuso orario a 4 cifre come specificato in ISO8601, per ospitare zone non intere. Mi ha sempre infastidito il fatto che ISO8601 non affronti i due punti proibiti nei nomi dei file.
hpekristiansen

Propongo un formato basato su ISO 8601 in un post su blog.xam.de/2016/07/… - renderebbe il nostro mondo più facile, se potessimo concordare un formato :-)
Dr. Max Völkel

"chiuso in quanto non costruttivo" ?? Ci sono ragioni a favore e contro ogni proposta, quindi è costruttiva. Non c'è bisogno di rifuggire da una domanda sui dettagli filosofici più fini della denominazione dei file: D
tanius

Risposte:


58

Io uso questo:

My-File--2009-12-31--23-59-59.txt
  • No spazi
  • Doppi trattini per separare i pezzi, rendendo ogni pezzo facile da vedere
  • Solo un carattere di punteggiatura (trattino) che lo rende facile da digitare
  • Nessun fuso orario perché per me lavoro sempre nel mio fuso orario locale; se ne avessi bisogno, andrei con UTC e aggiungerei " --UTC" dopo l'ora.

5
Faccio più o meno lo stesso anche se inizio con il timestamp e poi con il "mio file" poiché ciò consente di visualizzare i file in ordine cronologico semplicemente ordinando i nomi dei file in ordine alfabetico.
ChristopheD

2
@ChristopheD: Certo, in quel caso farei lo stesso. Per la mia risposta, stavo pensando al caso in cui hai diverse versioni di diversi file diversi e desideri raggrupparli per nome file.
RichieHindle

2
Personalmente preferisco usare il carattere di sottolineatura ( _) invece del doppio trattino per separare i pezzi. (es. 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.extva bene per la shell Linux. Nessun fuso orario, ma con precisione in nanosecondi.
Ivan Black

15

Lo userei YYYY-MM-DD HHmmssper i nomi dei file, a meno che non ci sia una particolare necessità di fusi orari o un'eventuale necessità di analizzarli in date ISO; in quei casi sarebbe probabilmente preferibile una data ISO.

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


9
ahi, spazi nei nomi dei file?
Saggi Malachi

10
Cosa c'è di sbagliato negli spazi?
Joey

41
Sì, gli spazi sono atroci.
Rintraccerò

1
@Saggi; beh, probabilmente me lo meritavo, ma seriamente, mostrami un sistema che non gestisce i nomi di file con spazi? Da quello che ho potuto raccogliere, non c'erano URI coinvolti e quindi non mi preoccupo troppo degli spazi. Ovviamente potresti scambiare quello spazio con qualcos'altro, come un trattino basso o T, ma è meno naturale quando lo leggi.
Tu

1
Voterò per questo (ma non userò mai spazi), il motivo è l'anno a 4 cifre che rimanderà il problema y2k1 (ma non quello y10k, ma chi se ne frega davvero di XXXX a riguardo?).
paxdiablo

9

Ecco cosa 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();
    }

Richiede una data e una descrizione. Usiamo "Mi piacciono i CANI". Risultati in:

ILikeDogs_1999-09-23_18-42


1
Bel modo per rompere la data e l'ora e 1 carattere in meno rispetto alla risposta di @ RichieHindle.
Robino

3

È necessario che il timestamp sia leggibile dall'uomo? In caso contrario, potresti semplicemente usare DateTime.Ticks.ToString () . Molto preciso, ordinabile e senza caratteri speciali.


1
Tendo a rendere tutto leggibile dall'uomo, 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 dall'uomo in seguito. Inoltre, tende a facilitare il debug.
Edan Maor

Il collegamento non è attivo, a cosa è andato?
rbatt

@rbatt Penso che fosse solo un problema temporaneo di MSDN - dovrebbe tornare ora.
Dan Diplo

2

Normalmente utilizzo aaaammgg. Se è necessaria un'ulteriore precisione, cambia in aaaammgghhmmss


1

Uso timestamp unix, ad es. quanti secondi sono passati dall'epoca. Tutti gli orari in UTC. Ma immagino che potresti aggiungere un prefisso ai dati del fuso orario, se lo desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.