Quel est votre format de date et d'heure préféré dans un nom de fichier? [fermé]

88

C'est une question un peu subjective, et pas très importante dans le grand schéma des choses, mais quelque chose qui pourtant m'ennuie régulièrement. Il ne semble pas y avoir de moyen évident de mettre un horodatage dans un nom de fichier .

Le problème objectif est que les horodatages dans les noms de fichiers doivent être triables . Mais les formats de date triables .NET tels que "s" ( "yyyy-MM-ddTHH:mm:ss") et "u" ( "yyyy-MM-dd HH:mm:ssZ") ne sont pas valides dans les noms de fichiers à cause des caractères ":".

Une autre chose est que vous devriez facilement voir si l'heure universelle ou locale est utilisée. En pratique, les utilisateurs semblent préférer l'heure locale à l'heure universelle.

J'ai surtout fini par utiliser ISO 8601 avec le format d'heure de base:

  • Chaîne de format d'heure locale "yyyy-MM-ddTHHmmsszz"
  • Chaîne de format UTC "yyyy-MM-ddTHHmmssZ"

Dans ces formats, mon heure locale actuelle serait "2009-08-08T151800+03"et UTC"2009-08-08T121800Z"

Vous pouvez également détecter automatiquement le DateTime.Kind avec "K" et l'utiliser "yyyy-MM-ddTHHmmssK", mais vous devrez ensuite remplacer les caractères ":".

D'autres suggestions?

Edit: Quelques notes jusqu'à présent:

Le format heure locale + fuseau horaire "yyyy-MM-ddTHHmmsszz"ne peut plus être trié si plusieurs fuseaux horaires sont impliqués. Dans la plupart des cas, il serait judicieux de supprimer les informations de fuseau horaire si elles sont redondantes et d'utiliser UTC dans le cas contraire.

Une autre chose est que UTC doit toujours être marqué avec «Z», «GMT» ou «UTC» pour éviter les conjectures et les erreurs.

Les dates juliennes et autres stardates sont cool car l'arithmétique des dates avec le calendrier grégorien est à lire.

mika
la source
2
Je suis d' accord avec tout cela sauf que je ne trouve important dans le grand schéma des choses. Votre format est le meilleur - J'utiliserais même un fuseau horaire à 4 chiffres comme spécifié dans ISO8601, pour accueillir des zones non entières. Cela m'a toujours dérangé que ISO8601 ne traite pas les deux points interdits dans les noms de fichiers.
hpekristiansen
Je propose un format basé sur ISO 8601 dans un article sur blog.xam.de/2016/07/… - rendrait notre monde plus facile, si nous pouvions nous mettre d'accord sur un format :-)
Dr. Max Völkel
"fermé car non constructif" ?? Il y a des raisons pour et contre chaque proposition, elle est donc constructive. Pas besoin de se dérober à une question sur les détails philosophiques plus fins de la dénomination des fichiers: D
tanius

Réponses:

57

J'utilise ceci:

My-File--2009-12-31--23-59-59.txt
  • Sans espaces
  • Tirets doubles pour séparer les pièces, ce qui rend chaque pièce facile à voir
  • Un seul caractère de ponctuation (tiret) facilitant la saisie
  • Pas de fuseau horaire car pour moi je travaille toujours dans mon fuseau horaire local; si j'en avais besoin, j'irais avec UTC et ajouterais " --UTC" après l'heure.
RichieHindle
la source
5
Je fais à peu près la même chose bien que je commence par l'horodatage et ensuite le truc «mon-fichier» puisque cela permet de visualiser les fichiers dans l'ordre chronologique en classant simplement les noms de fichiers par ordre alphabétique.
ChristopheD
2
@ChristopheD: Bien sûr - je ferais la même chose dans ce cas. Pour ma réponse, je pensais au cas où vous avez plusieurs versions de plusieurs fichiers différents, et vous voulez les regrouper par nom de fichier.
RichieHindle
2
Personnellement, je préfère utiliser le trait de soulignement ( _) au lieu du double tiret pour séparer les morceaux. (par exemple My-File_2009-12-31_23-59-59.txt)
Elie G.
A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extest ok pour le shell Linux. Pas de fuseau horaire, mais avec une précision de nanosecondes.
Ivan Black
14

J'utiliserais YYYY-MM-DD HHmmsspour les noms de fichiers, à moins qu'il y ait un besoin particulier de fuseaux horaires ou un besoin éventuel de les analyser en dates ISO; dans ces cas, une date ISO serait probablement préférable.

Edit: Les fuseaux horaires ne devraient jamais vraiment être requis; tout enregistrer en UTC et faire savoir aux gens que tout est UTC est plus efficace que de spécifier le fuseau horaire de tout.

Tu
la source
9
aïe, des espaces dans vos noms de fichiers?
Saggi Malachi
10
Quel est le problème avec les espaces?
Joey
41
Oui, les espaces sont odieux. Je vais personnellement retrouver les personnes qui utilisent des espaces dans les noms de fichiers et les battre à mort avec un bâton humide de céleri :-)
paxdiablo
1
@Saggi; Eh bien, je méritais probablement celui-là, mais sérieusement - montrez-moi un système qui ne gère pas les noms de fichiers avec des espaces? D'après ce que j'ai pu comprendre, il n'y avait pas d'URI impliqués et donc je ne m'inquiète pas trop des espaces. Vous pouvez bien sûr échanger cet espace contre quelque chose d'autre, comme un trait de soulignement ou T, mais c'est moins naturel lorsque vous le lisez.
Vous
1
Je voterai pour celui-ci (mais je n'utiliserai jamais d'espaces), la raison étant l'année à 4 chiffres qui retardera le problème de y2k1 (mais pas celui de y10k, mais qui donne vraiment un XXXX à ce sujet?).
paxdiablo
8

Voici ce que j'utilise:

    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();
    }

Il faut une date et une description. Utilisons "J'aime les chiens". Résulte en:

ILikeDogs_1999-09-23_18-42

N-mangé
la source
1
Belle façon de briser la date et l'heure et 1 caractère de moins que la réponse de @ RichieHindle.
Robino
3

Est-il nécessaire que l'horodatage soit lisible par l'homme? Sinon, vous pouvez simplement utiliser DateTime.Ticks.ToString () . Très précis, triable et sans caractères spéciaux.

Dan Diplo
la source
1
J'ai tendance à essayer de rendre tout ce qui est lisible par l'homme, si possible. C'est l'une des grandes valeurs des schémas comme la notation JSON. Même si vous ne pensez pas qu'il doit être lisible par l'homme, vous ne savez jamais si vous voudrez qu'il soit lisible par l'homme plus tard. En outre, cela facilite le débogage.
Edan Maor
Le lien est en panne, à quoi est-il allé?
rbatt
@rbatt Je pense que c'était juste un problème MSDN temporaire - devrait être de retour maintenant.
Dan Diplo
2

Normalement, j'utilise aaaammjj. Si plus de précision est nécessaire, il devient aaaammjjhhmmss

Carlton Jenke
la source
1

J'utilise des horodatages unix, par exemple. combien de secondes se sont écoulées depuis l'époque. Toutes les heures en UTC. Mais supposez que vous pouvez préfixer les données de fuseau horaire si vous le souhaitez.

Jinzo
la source