solo sistema obtener fecha ejemplos creacion año archivo actual .net datetime filenames

.net - sistema - ¿Cuál es su formato de fecha y hora favorito en un nombre de archivo?



obtener fecha creacion archivo c# (6)

Esta es una pregunta un tanto subjetiva, y no muy importante en el gran esquema de las cosas, pero algo que aún me molesta regularmente. Parece que no hay una forma evidente de poner una marca de tiempo en un nombre de archivo .

El problema objetivo es que las marcas de tiempo en los nombres de los archivos deben poder ordenarse . Pero los formatos de fecha ordenables de .NET como "s" ( "yyyy-MM-ddTHH:mm:ss" ) y "u" ( "yyyy-MM-dd HH:mm:ssZ" ) no son válidos en los nombres de archivo debido a " :'' caracteres.

Otra cosa es que debería ver fácilmente si se usa la hora universal o local . Prácticamente, los usuarios parecen preferir la hora local a la hora universal.

En su mayoría terminé usando ISO 8601 con formato de tiempo básico:

  • La cadena de formato de hora local "yyyy-MM-ddTHHmmsszz"
  • Cadena de formato UTC "yyyy-MM-ddTHHmmssZ"

En estos formatos, mi hora local actual sería "2009-08-08T151800+03" y UTC "2009-08-08T121800Z"

También puede autodetectar el DateTime.Kind con "K" y usar "yyyy-MM-ddTHHmmssK" , pero luego tendrá que reemplazar los caracteres '':''.

¿Cualquier otra sugerencia?

Editar: Algunas notas hasta el momento:

El formato de hora local + zona horaria "yyyy-MM-ddTHHmmsszz" ya no se puede ordenar si se trata de varias zonas horarias. En la mayoría de los casos, tiene sentido soltar la información de zona horaria si es redundante, y usar UTC de lo contrario.

Otra cosa es que UTC siempre se debe marcar con ''Z'', ''GMT'' o ''UTC'' para evitar conjeturas y errores.

Las fechas julianas y otras fechas stardates son geniales porque la aritmética de la fecha con el calendario gregoriano es muerte cerebral.


¿Existe un requisito para que la marca de tiempo sea legible por humanos? De lo contrario, podría usar DateTime.Ticks.ToString() . Muy preciso, ordenable y sin caracteres especiales.


Esto es lo que uso:

private static string CreateMeaningfulFileName(string friendlyName, DateTime date) { StringBuilder sb = new StringBuilder(); foreach (string s in friendlyName.Split(new char[] { '' '' }))//remove spaces { sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment } sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date return sb.ToString(); }

Se necesita una fecha y una descripción. Usemos "Me gustan los perros". Resultados en:

ILikeDogs_1999-09-23_18-42


Normalmente uso aaaammdd. Si se necesita más precisión, cambia a aaaammddhhmmss


Yo uso esto:

My-File--2009-12-31--23-59-59.txt

  • No hay espacios
  • Doble guiones para separar las piezas, haciendo que cada pieza sea fácil de ver
  • Solo un carácter de puntuación (guión) lo que hace que sea fácil escribir
  • Sin zona horaria porque para mí siempre estoy trabajando en mi zona horaria local; si lo necesitara, iría con UTC y --UTC " --UTC " después de la hora.

Yo uso marcas de tiempo Unix, por ej. cuantos segundos pasaron de la época. Todo el tiempo en UTC. Pero supongo que podrías prefijar los datos w / timezone si lo deseas.


YYYY-MM-DD HHmmss para nombres de archivo, a menos que haya una necesidad particular de zonas horarias o una posible necesidad de analizarlas en fechas ISO; en esos casos, una fecha ISO probablemente sería preferible.

Edición: las zonas horarias no deberían ser realmente necesarias; guardar todo en UTC y hacer saber a las personas que todo es UTC es más eficiente que especificar el huso horario de todo.