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.
Réponses:
J'utilise ceci:
My-File--2009-12-31--23-59-59.txt
--UTC
" après l'heure.la source
_
) au lieu du double tiret pour séparer les morceaux. (par exempleMy-File_2009-12-31_23-59-59.txt
)name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.ext
est ok pour le shell Linux. Pas de fuseau horaire, mais avec une précision de nanosecondes.J'utiliserais
YYYY-MM-DD HHmmss
pour 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.
la source
T
, mais c'est moins naturel lorsque vous le lisez.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
la source
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.
la source
Normalement, j'utilise aaaammjj. Si plus de précision est nécessaire, il devient aaaammjjhhmmss
la source
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.
la source