Format DateTime.ToString () qui peut être utilisé dans un nom de fichier ou une extension?

100

Je souhaite ajouter un horodatage aux noms de fichiers au fur et à mesure que les fichiers sont créés, mais la plupart des méthodes DateTime que j'ai essayées produisent quelque chose avec des espaces et des barres obliques. Par exemple:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806

ToFileTime()fonctionne mais n'est pas exactement lisible par l'homme. Comment puis-je formater la sortie en un horodatage lisible par l'homme avec une date et une heure pouvant être utilisées dans un nom de fichier ou une extension? De préférence quelque chose comme 2011-19-9--13-45-30?

pdizz
la source
2
Que diriez-vous de ça ... DateTime.Now.ToString ("aaaa-MM-jj - hh-mm-ss")
Gene S

Réponses:

177

Vous pouvez utiliser ceci:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Kristof Claes
la source
5
Vous avez un aperçu de plus d'exemples / d'options ici: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes
1
Je suppose que considérer l'heure de l'UTC serait mieux
RealSteel
89
Proposez-vous sérieusement d'avoir la journée entre l'année et le mois?
kjbartel
10
Encore plus inexcusable dans un nom de fichier puisque la liste des fichiers ne peut pas être triée par nom pour les obtenir dans l'ordre date-heure. Le plus important au moins significatif devrait être à l'ordre du jour.
Bernhard Hofmann
4
@Matt - vous supposez que le nom de fichier est lié à la date de création / modification / accès, ce qui n'est pas toujours le cas.
Bernhard Hofmann
121

J'utiliserais le format ISO 8601 , sans séparateurs:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Christoffer Lette
la source
7
Si vous utilisez DateTime.Now.ToString("o"), il vous donnera yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(où le décalage final des heures et des minutes est +/- GMT). Certes, cela ne fonctionnerait pas comme format de nom de fichier, mais le "o"formatage est bon à savoir.
krillgar le
16

J'ai une situation similaire mais je veux un moyen cohérent de pouvoir utiliser DateTime.Parse à partir du nom de fichier également, donc je suis allé avec

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35

Lorsque je veux analyser, je peux simplement inverser l'appel de remplacement. De cette façon, je n'ai pas besoin de taper des trucs yymmdd ou de deviner les formats autorisés par DateTime.Parse.

Gabe Haack
la source
8

La liste ci-dessous des spécificateurs de format d'heure les plus couramment utilisés.,

jj - jour du mois, du 01 au 31.

MM - mois , du 01 au 12.

aaaa - année sous forme de nombre à quatre chiffres.

hh - heure , en utilisant unehorloge de 12 heures de 01 à 12.

mm - minute , de 00 à 59.

ss - seconde , de 00 à 59.

HH - heure , en utilisant unehorloge de 24 heures de 00 à 23.

tt -désignateur AM / PM .

En utilisant ce qui précède, vous pourrez former un nom unique à votre nom de fichier.

Ici, j'ai fourni un exemple

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";

OU

Si vous ne préférez pas utiliser de symboles, vous pouvez également essayer ceci.,

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";

J'espère que cela aidera quelqu'un maintenant ou dans le futur. :)

RajeshKdev
la source
7

Personnellement, je l'aime de cette façon:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")

Parce qu'il fait la distinction entre la date et l'heure.

Charles Clayton
la source
1
Je suppose que vous voulez dire "aaaa-MM-jj HH.mm.ss"
Filimindji
3

Vous pouvez essayer avec

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
Aghilas Yakoub
la source
3

Utilisation de la chaîne d' interpolation et du spécificateur de format :

var filename = $"{DateTime.Now:yyyy.dd.M HH-mm-ss}"

Ou si vous n'êtes pas en Amérique:

var filename = $"{DateTime.Now:yyyy.M.dd HH-mm-ss}"

Cette fonctionnalité est disponible en C # 6 et les versions ultérieures du langage.

Pattes de poulet
la source
2

Vous pouvez créer un chemin pour votre fichier comme ci-dessous:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
rouhollah ghasempour
la source