Formato DateTime.ToString () que pode ser usado em um nome de arquivo ou extensão?

100

Eu quero adicionar um carimbo de data / hora aos nomes de arquivos à medida que os arquivos são criados, mas a maioria dos métodos DateTime eu tentei produzir algo com espaços e barras. Por exemplo:

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()funciona, mas não é exatamente legível por humanos. Como posso formatar a saída para um carimbo de data / hora legível com data e hora que pode ser usado em um nome de arquivo ou extensão? De preferência algo como 2011-19-9--13-45-30?

pdizz
fonte
2
Que tal isso ... DateTime.Now.ToString ("aaaa-MM-dd - hh-mm-ss")
Gene S

Respostas:

177

Você pode usar isto:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Kristof Claes
fonte
5
Veja mais exemplos / opções aqui: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes
1
Acho que considerando o tempo utc seria melhor
RealSteel
89
Você está sugerindo seriamente para ter o dia entre o ano e o mês ??
kjbartel de
10
Ainda mais imperdoável em um nome de arquivo, uma vez que a lista de arquivos não pode ser classificada por nome para colocá-los na ordem de data e hora. O mais significativo para o menos significativo deve estar na ordem do dia.
Bernhard Hofmann,
4
@Matt - você assume que o nome do arquivo está relacionado à data de criação / modificação / acesso, o que nem sempre é.
Bernhard Hofmann
121

Eu usaria o formato ISO 8601 , sem separadores:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Christoffer Lette
fonte
7
Se você usar DateTime.Now.ToString("o"), ele mostrará yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(onde a hora e o minuto finais são +/- GMT). Concedido, isso não funcionaria como um formato de nome de arquivo, mas "o"é bom saber a formatação.
Krillgar
16

Eu tenho uma situação semelhante, mas quero uma maneira consistente de poder usar DateTime.Parse no nome do arquivo também, por isso segui

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

Quando desejo analisar, posso simplesmente reverter a chamada Replace. Dessa forma, não preciso digitar nada no yymmdd ou adivinhar quais formatos DateTime.Parse permite.

Gabe Haack
fonte
8

A lista abaixo de especificadores de formato de hora mais comumente usados.,

dd - dia do mês, de 01 a 31.

MM - mês , de 01 a 12.

aaaa - ano como um número de quatro dígitos.

hh - hora , usando umrelógio de 12 horas de 01 a 12.

mm - minuto , de 00 a 59.

ss - segundo , de 00 a 59.

HH - hora , usando umrelógio de 24 horas das 00 às 23.

tt -designador AM / PM .

Usando o acima, você será capaz de formar um nome exclusivo para o seu nome de arquivo.

Aqui eu forneci um exemplo

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

OU

Se você não preferir usar símbolos, também pode tentar isso.,

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

Espero que isso ajude alguém agora ou no futuro. :)

RajeshKdev
fonte
7

Pessoalmente, gosto desta forma:

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

Porque distingue entre a data e a hora.

Charles Clayton
fonte
1
Acho que você quer dizer "aaaa-MM-dd HH.mm.ss"
Filimindji
3

Você pode tentar com

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
Aghilas Yakoub
fonte
3

Usando string de interpolação e especificador de formato :

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

Ou se você não estiver na América:

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

Esse recurso está disponível em C # 6 e versões posteriores da linguagem.

Pé de galinha
fonte
2

Você pode criar um caminho para o seu arquivo conforme abaixo:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
rouhollah ghasempour
fonte