DateTime.ToString () formato che può essere utilizzato in un nome di file o estensione?


100

Voglio aggiungere un timestamp ai nomi dei file mentre vengono creati i file, ma la maggior parte dei metodi DateTime che ho provato produce qualcosa con spazi e barre. Per esempio:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806

ToFileTime()funziona ma non è esattamente leggibile dall'uomo. Come posso formattare l'output in un timestamp leggibile dall'uomo con data e ora che possono essere utilizzate in un nome file o estensione? Preferibilmente qualcosa di simile 2011-19-9--13-45-30?


2
Che ne dici di questo ... DateTime.Now.ToString ("yyyy-MM-dd - hh-mm-ss")
Gene S

Risposte:


177

Puoi usare questo:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");


1
Credo che considerando il tempo UTC sarebbe meglio
Real Steel

89
Stai seriamente suggerendo di avere il giorno tra l'anno e il mese ??
kjbartel

10
Ancora più imperdonabile in un nome di file poiché l'elenco dei file non può essere ordinato per nome per ottenerli in ordine di data e ora. Dal più significativo al meno significativo dovrebbe essere l'ordine del giorno.
Bernhard Hofmann

4
@Matt - presumi che il nome del file sia correlato alla data di creazione / modifica / accesso che non è sempre.
Bernhard Hofmann

121

Vorrei utilizzare l'ISO 8601 formato, senza separatori:

DateTime.Now.ToString("yyyyMMddTHHmmss")

7
Se lo usi DateTime.Now.ToString("o"), ti darà yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(dove l'ora finale e l'offset dei minuti sono +/- GMT). Certo, questo non funzionerebbe come formato di nome file, ma "o"è bene conoscere la formattazione.
krillgar

16

Ho una situazione simile ma voglio un modo coerente per poter utilizzare DateTime.Parse anche dal nome del file, quindi sono andato con

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35

Quando voglio analizzare, posso semplicemente invertire la chiamata di sostituzione. In questo modo non devo digitare nulla di yymmdd o indovinare quali formati DateTime.Parse consente.


8

L'elenco di seguito degli specificatori di formato dell'ora più comunemente utilizzati.,

gg - giorno del mese, da 01 a 31.

MM - mese , da 01 a 12.

yyyy - anno come numero di quattro cifre.

hh - ora , utilizzando unorologio di 12 ore da 01 a 12.

mm - minuti , da 00 a 59.

ss - secondo , da 00 a 59.

HH - ora , utilizzando un orologio di 24 ore da 00 a 23.

tt -Designatore AM / PM .

Usando quanto sopra sarai in grado di formare un nome univoco al nome del tuo file.

Qui ho fornito un esempio

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";

O

Se non preferisci usare i simboli puoi provare anche questo.,

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";

Spero che questo aiuti qualcuno ora o in futuro. :)


7

Personalmente mi piace così:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")

Perché distingue tra la data e l'ora.


1
Immagino tu intenda "aaaa-MM-gg HH.mm.ss"
Filimindji


3

Utilizzando la stringa di interpolazione e l'identificatore di formato :

var filename = $"{DateTime.Now:yyyy.dd.M HH-mm-ss}"

O se non sei in America:

var filename = $"{DateTime.Now:yyyy.M.dd HH-mm-ss}"

Questa funzionalità è disponibile in C # 6 e nelle versioni successive del linguaggio.


2

Puoi creare un percorso per il tuo file come segue:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
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.