Esta es una pregunta algo subjetiva, y no muy importante en el gran esquema de las cosas, pero algo que 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 .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 los caracteres ':'.
Otra cosa es que debería ver fácilmente si se usa la hora local o universal . Prácticamente, los usuarios parecen preferir la hora local a la hora universal.
La mayoría de las veces terminé usando ISO 8601 con formato de hora básico:
- 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 detectar automáticamente el tipo DateTime.Kind con "K" y usarlo "yyyy-MM-ddTHHmmssK"
, pero luego tendrá que reemplazar los caracteres ':'.
¿Cualquier otra sugerencia?
Editar: algunas notas hasta ahora:
El formato de hora local + zona horaria "yyyy-MM-ddTHHmmsszz"
ya no se puede ordenar si hay varias zonas horarias involucradas. En la mayoría de los casos, tendría sentido eliminar la información de la zona horaria si es redundante y usar UTC en caso contrario.
Otra cosa es que UTC siempre debe estar marcado con 'Z', 'GMT' o 'UTC' para evitar conjeturas y errores.
Las fechas julianas y otras fechas estelares son geniales porque la aritmética de fechas con el calendario gregoriano está muerta de cerebro.
Respuestas:
Yo uso esto:
My-File--2009-12-31--23-59-59.txt
--UTC
" después de la hora.fuente
_
) en lugar de guiones dobles para separar las piezas. (pMy-File_2009-12-31_23-59-59.txt
. ej. )name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.ext
está bien para el shell de Linux. Sin zona horaria, pero con precisión de nanosegundos.Lo usaría
YYYY-MM-DD HHmmss
para nombres de archivos, a menos que haya una necesidad particular de zonas horarias o una posible necesidad de analizarlas en fechas ISO; en esos casos, probablemente sería preferible una fecha ISO.Editar: Las zonas horarias realmente nunca deberían ser necesarias; guardar todo en UTC y hacer saber a la gente que todo es UTC es más eficiente que especificar la zona horaria de todo.
fuente
T
, pero eso es menos natural cuando lo lee.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(); }
Lleva fecha y descripción. Usemos "Me gustan los PERROS". Resultados en:
ILikeDogs_1999-09-23_18-42
fuente
¿Existe algún requisito para que la marca de tiempo sea legible por humanos? Si no, puede usar DateTime.Ticks.ToString () . Muy precisa, ordenable y sin caracteres especiales.
fuente
Normalmente uso aaaammdd. Si se necesita más precisión, cambia a aaaammddhhmmss
fuente
Yo uso marcas de tiempo de Unix, por ejemplo. cuántos segundos pasaron de la época. Todas las horas en UTC. Pero supongo que podría prefijar con datos de zona horaria si lo desea.
fuente