pourquoi DateTime.ToString («jj / MM / aaaa») me donne-t-il jj-MM-aaaa?

155

Je veux que ma date / heure soit convertie en une chaîne au format "jj / MM / aaaa"

Chaque fois que je le convertis en utilisant DateTime.ToString("dd/MM/yyyy"), j'obtiens à la dd-MM-yyyyplace.

Y a-t-il une sorte d'informations sur la culture que je dois définir?

Disque
la source
do DateTime.ToString ("jj / MM / aaaa");
jimplode le
2
J'ai fait ça, ça n'a pas fonctionné, le problème n'est pas les dates, c'est le "-", je veux que ce soit un "/" comme je l'ai spécifié
Diskdrive
7
utilisez MM plutôt que mm - mm représente les minutes et non les mois.
Lloyd Powell le
La documentation MSDN pour DateTime.ToString est désespérément fausse: " Par exemple, la chaîne de format" MM / jj / aaaaHH: mm "affiche la chaîne de date et d'heure dans un format fixe ... La chaîne de format utilise" / "comme valeur fixe séparateur de date indépendamment des paramètres spécifiques à la culture. "
Colonel Panic

Réponses:

243

Slash est un délimiteur de date, qui utilisera donc le délimiteur de date de culture actuel.

Si vous voulez le coder en dur pour toujours utiliser la barre oblique, vous pouvez faire quelque chose comme ceci:

DateTime.ToString("dd'/'MM'/'yyyy")
Bojan Bjelic
la source
2
@spender - dans certaines cultures, ils le sont.
Daniel A. White
Merci pour votre réponse rapide. Vous avez raison. Je vais vous donner la bonne réponse
Diskdrive
6
Vous pouvez également utiliser ce format: dateTime.ToString (@ "aaaa \ / MM \ / jj")
base2
2
Échapper la chaîne de format à l'aide de la barre oblique inverse fonctionne également: DateTime.Now.ToString ("jj \\ / MM \\ / aaaa");
TomB
61

Passez CultureInfo.InvariantCulture comme deuxième paramètre de DateTime, il retournera la chaîne comme vous le souhaitez, même dans un format très spécial:

DateTime.Now.ToString("dd|MM|yyyy", CultureInfo.InvariantCulture)

reviendra: 28 | 02 | 2014

Liu Peng
la source
Ce code est plus clair que dans la réponse acceptée (je veux dire ajouté CultureInfo). Cela semble au moins mieux que d'échapper aux barres obliques par des apostrophes.
Sergey
2
Certainement plus facile à lire que d'utiliser des caractères d'échappement. Je suis un peu choqué de ne pas savoir tout le temps que mes formats de date allaient être écrasés!
Savage
10

Ajouter CultureInfo.InvariantCulturecomme argument:

using System.Globalization;

...

var dateTime = new DateTime(2016,8,16);
dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

Reviendra:

"16/08/2016"
Graveur Mikael
la source
si le développeur utilise la méthode tostring avec des lettres telles que M m ss etc. obtiendra un résultat erroné avec votre solution par exemple Datetime.Now.ToString ("aaaa / jj / mm / mois", CultureInfo.InvariantCulture) ne produira pas 2017/01 / 02 / Mois il en résultera 2017/01/02/2 mois
Okan SARICA
@OkanSARICA si vous souhaitez ajouter à la date un suffixe "/ mois", vous devez le faire après la méthode ToString à la place. DateTime.Now.ToString ("aaaa / MM / jj", CultureInfo.InvariantCulture) + "/ Mois";
Mikael Engver
1

Si vous utilisez MVC, des tables, cela fonctionne comme ceci:

<td>@(((DateTime)detalle.fec).ToString("dd'/'MM'/'yyyy"))</td>
Maurico Bello
la source