¿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?


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");


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")

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.


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. :)


7

Personalmente me gusta así:

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

Porque distingue entre la fecha y la hora.


1
Supongo que te refieres a "aaaa-MM-dd HH.mm.ss"
— Filimindji


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.


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";
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.