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