¿Cuál es su formato de fecha y hora favorito en un nombre de archivo? [cerrado]

88

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.

mika
fuente
2
Estoy de acuerdo con todo esto, excepto que lo encuentro importante en el gran esquema de las cosas. Su formato es el mejor; incluso usaría una zona horaria de 4 dígitos como se especifica en ISO8601, para dar cabida a zonas no enteras. Siempre me ha molestado que ISO8601 no aborde los dos puntos prohibidos en los nombres de archivo.
hpekristiansen
Propongo un formato basado en ISO 8601 en una publicación en blog.xam.de/2016/07/… - haría nuestro mundo más fácil, si pudiéramos acordar un formato :-)
Dr. Max Völkel
"cerrado como no constructivo" ?? Hay razones a favor y en contra de cada propuesta, por lo que es constructiva. No hay necesidad de evitar una pregunta sobre los detalles filosóficos más finos de la denominación de archivos: D
tanius

Respuestas:

57

Yo uso esto:

My-File--2009-12-31--23-59-59.txt
  • No hay espacios
  • Guiones dobles para separar las piezas, haciendo que cada pieza sea fácil de ver.
  • Solo un carácter de puntuación (guión) para facilitar la escritura
  • Sin zona horaria porque para mí siempre estoy trabajando en mi zona horaria local; si necesitara uno, iría con UTC y agregaría " --UTC" después de la hora.
RichieHindle
fuente
5
Hago aproximadamente lo mismo, aunque empiezo con la marca de tiempo y luego con las cosas de 'mi archivo', ya que eso permite ver los archivos en orden cronológico con solo ordenar los nombres de archivo alfabéticamente.
ChristopheD
2
@ChristopheD: Claro, haría lo mismo en ese caso. Para mi respuesta, estaba pensando en el caso en el que tiene varias versiones de varios archivos diferentes y los quiere agrupados por nombre de archivo.
RichieHindle
2
Personalmente, prefiero usar subrayado ( _) en lugar de guiones dobles para separar las piezas. (p My-File_2009-12-31_23-59-59.txt. ej. )
Elie G.
A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extestá bien para el shell de Linux. Sin zona horaria, pero con precisión de nanosegundos.
Ivan Black
14

Lo usaría YYYY-MM-DD HHmmsspara 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.

usted
fuente
9
ay, espacios en sus nombres de archivo?
Saggi Malachi
10
¿Qué pasa con los espacios?
Joey
41
Sí, los espacios son atroces. Personalmente rastrearé a las personas que usan espacios en los nombres de los archivos y los
golpearé
1
@Saggi; bueno, probablemente me lo merecía, pero en serio, muéstrame un sistema que no maneje nombres de archivo con espacios. Por lo que pude reunir, no hubo URI involucrados y, por lo tanto, no me preocupo demasiado por los espacios. Por supuesto, podría cambiar ese espacio por otra cosa, como un guión bajo o T, pero eso es menos natural cuando lo lee.
Usted
1
Votaré por este (pero nunca usaría espacios), la razón es el año de 4 dígitos que pospondrá el problema y2k1 (pero no el y10k, pero ¿a quién realmente le importa un XXXX?).
paxdiablo
8

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

N-ate
fuente
1
Buena manera de romper la fecha y la hora y 1 carácter menos que la respuesta de @ RichieHindle.
Robino
3

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

Dan Diplo
fuente
1
Tiendo a intentar que todo sea legible para los humanos, si es que es posible. Este es uno de los grandes valores de esquemas como la notación JSON. Incluso si no cree que deba ser legible por humanos, nunca sabrá si querrá que sea legible por humanos más adelante. Además, tiende a facilitar la depuración.
Edan Maor
El enlace no funciona, ¿a qué se dirigió?
rbatt
@rbatt Creo que fue solo un problema temporal de MSDN, debería estar de vuelta ahora.
Dan Diplo
2

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

Carlton Jenke
fuente
1

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.

Jinzo
fuente