J'ai eu ce problème plusieurs fois et je viens d'utiliser une solution de contournement, mais j'ai pensé que je demanderais ici au cas où il y aurait une option plus facile. Quand j'ai une chaîne de DateTime.Now
et je veux ensuite l'utiliser dans un nom de fichier que je ne peux pas parce que Windows n'autorise pas les caractères/et: dans les noms de fichiers, je dois aller les remplacer comme ceci:
string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
Ce qui semble un peu compliqué, existe-t-il un moyen plus simple de le faire? Toutes suggestions très appréciées.
DateTime.Now.ToString("dd_MM_yyyy")
Comme écrit par Samich, mais
// The following will produce 2011-10-24-13-10
DateTime.Now.ToString("yyyy-MM-dd-HH-mm", CultureInfo.InvariantCulture);
Si vous ne me faites pas confiance, essayez de définir la culture sur new CultureInfo("ar-sa");
:-)
J'ajouterai que si vous détestez le monde, c'est la chose la plus précise à faire:
DateTime.Now.Ticks.ToString("D19");
Il y a 19 chiffres dans DateTime.MaxValue.Ticks
Si vous détestez encore plus le monde:
DateTime.Now.Ticks.ToString("X16");
Il y a 16 chiffres hexadécimaux dans DateTime.MaxValue.Ticks
.
Utilisez un modèle ToString:
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
Vous pouvez utiliser le format long de l'horodatage:
DateTime.Now.ToBinary()
Si vous avez besoin que le datetime soit plus précis, vous pouvez utiliser:
DateTime.Now.ToString("O").Replace(":", "_") //2016-09-21T13_14_01.3624587+02_00
ou (si vous en avez besoin un peu moins)
DateTime.Now.ToString("s").Replace(":", "_") //2016-09-21T13_16_11
Les deux sont des noms de fichiers valides et sont triables.
Vous pouvez créer une méthode d'extensions:
public static string ToFileName(this DateTime @this)
{
return @this.ToString("O").Replace(":", "_");
}
Et puis utilisez-le comme ceci:
var saveZipToFile = "output_" + DateTime.Now.ToFileName() + ".Zip";
Le format "s" ne prend pas en compte les fuseaux horaires et donc les horaires:
formatés avec "s" sont identiques.
Donc, si vos heures représentent des fuseaux horaires dirrerent, je recommanderais d'utiliser "O" ou d'utiliser DateTime.UtcNow
.