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.