¿Formato DateTime.ToString () que se puede usar en un nombre de archivo o extensión?

100

Quiero agregar una marca de tiempo a los nombres de archivo a medida que se crean los archivos, pero la mayoría de los métodos de DateTime que he intentado generar algo con espacios y barras. Por ejemplo:

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 pero no es exactamente legible por humanos. ¿Cómo puedo formatear la salida a una marca de tiempo legible por humanos con fecha y hora que se puede usar en un nombre de archivo o extensión? ¿Preferiblemente algo como 2011-19-9--13-45-30?

pdizz
fuente
2
¿Qué tal esto ... DateTime.Now.ToString ("aaaa-MM-dd - hh-mm-ss")
Gene S

Respuestas:

177

Puedes usar esto:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Kristof Claes
fuente
5
Puede ver más ejemplos / opciones aquí: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes
1
Supongo que considerar la hora utc sería mejor
RealSteel
89
¿Estás sugiriendo seriamente tener el día entre el año y el mes?
kjbartel
10
Aún más imperdonable en un nombre de archivo, ya que la lista de archivos no se puede ordenar por nombre para ponerlos en orden de fecha y hora. De más significativo a menos significativo debería estar a la orden del día.
Bernhard Hofmann
4
@Matt: asume que el nombre del archivo está relacionado con la fecha de creación / modificación / acceso, que no siempre es así.
Bernhard Hofmann
121

Me gustaría utilizar la norma ISO 8601 de formato, sin separadores:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Christoffer Lette
fuente
7
Si lo usa DateTime.Now.ToString("o"), le dará yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(donde la diferencia de hora y minuto final es +/- GMT). Por supuesto, esto no funcionaría como formato de nombre de archivo, pero "o"es bueno saber el formato.
krillgar
16

Tengo una situación similar pero quiero una forma consistente de poder usar DateTime.Parse desde el nombre del archivo también, así que fui con

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

Cuando quiero analizar, simplemente puedo revertir la llamada Reemplazar. De esta manera no tengo que escribir nada aammdd ni adivinar qué formatos permite DateTime.Parse.

Gabe Haack
fuente
8

La siguiente lista de especificadores de formato de hora más utilizados.,

dd - día del mes, del 01 al 31.

MM - mes , del 01 al 12.

aaaa : año como un número de cuatro dígitos.

hh - hora , usando unreloj de 12 horas de 01 a 12.

mm - minuto , de 00 a 59.

ss - segundo , de 00 a 59.

HH - hora , usando unreloj de 24 horas de 00 a 23.

tt :designador AM / PM .

Usando lo anterior, podrá formar un nombre único para su nombre de archivo.

Aquí he proporcionado un ejemplo

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

O

Si no prefiere usar símbolos, puede probar esto también.

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

Espero que esto ayude a alguien ahora o en el futuro. :)

RajeshKdev
fuente
7

Personalmente me gusta así:

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

Porque distingue entre la fecha y la hora.

Charles Clayton
fuente
1
Supongo que te refieres a "aaaa-MM-dd HH.mm.ss"
Filimindji
3

Puedes probar con

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

Usando la cadena de interpolación y el especificador de formato :

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

O si no estás en Estados Unidos:

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

Esta función está disponible en C # 6 y versiones posteriores del idioma.

Patas de pollo
fuente
2

Puede hacer una ruta para su archivo como se muestra a continuación:

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