Warum gibt mir DateTime.ToString ("TT / MM / JJJJ") TT-MM-JJJJ?

155

Ich möchte, dass meine Datums- und Uhrzeitangabe in eine Zeichenfolge im Format "TT / MM / JJJJ" konvertiert wird.

Immer wenn ich es mit konvertiere DateTime.ToString("dd/MM/yyyy"), bekomme ich dd-MM-yyyystattdessen.

Gibt es eine Art Kulturinformation, die ich einstellen muss?

Festplatte
quelle
do DateTime.ToString ("TT / MM / JJJJ");
Jimplode
2
Ich habe das getan, es hat nicht funktioniert, das Problem sind nicht die Daten, es ist das "-", ich möchte, dass es ein "/" ist, wie ich es angegeben habe
Diskdrive
7
Verwenden Sie MM anstelle von mm - mm steht für Minuten und nicht für Monate.
Lloyd Powell
1
mögliches Duplikat von Wie man ein Datum mit Schrägstrichen in C #
formatiert
Die MSDN-Dokumentation für DateTime.ToString ist hoffnungslos falsch: " Beispielsweise zeigt die Formatzeichenfolge" MM / TT / JJJJHH: MM "die Datums- und Zeitzeichenfolge in einem festen Format an ... Die Formatzeichenfolge verwendet" / "als festes Format Datumstrennzeichen unabhängig von kulturspezifischen Einstellungen. "
Colonel Panic

Antworten:

243

Ein Schrägstrich ist ein Datumsbegrenzer, sodass der aktuelle Kultur-Datumsbegrenzer verwendet wird.

Wenn Sie es fest codieren möchten, um immer einen Schrägstrich zu verwenden, können Sie Folgendes tun:

DateTime.ToString("dd'/'MM'/'yyyy")
Bojan Bjelic
quelle
2
@spender - in einigen Kulturen sind sie.
Daniel A. White
Danke für deine schnelle Antwort. Du hast recht. Ich gebe Ihnen die richtige Antwort
Diskdrive
6
Sie können auch dieses Format verwenden: dateTime.ToString (@ "yyyy \ / MM \ / dd")
base2
2
Das Escapezeichen der Formatzeichenfolge mit Backslash funktioniert auch: DateTime.Now.ToString ("TT \\ / MM \\ / JJJJ");
TomB
61

Übergeben Sie CultureInfo.InvariantCulture als zweiten Parameter von Datetime, wird er die Zeichenkette zurück, was Sie wollen, auch ein ganz besonderes Format:

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

wird zurückkehren: 28 | 02 | 2014

Liu Peng
quelle
Dieser Code ist klarer als in der akzeptierten Antwort (ich meine, CultureInfo hinzugefügt). Es sieht zumindest besser aus, als den Schrägen durch Apostrophe zu entkommen.
Sergey
2
Auf jeden Fall einfacher zu lesen als Escapezeichen. Ich bin ein bisschen schockiert, dass ich nicht die ganze Zeit wusste, dass meine Datumsformate überschrieben werden würden!
Savage
10

Fügen Sie CultureInfo.InvariantCultureals Argument:

using System.Globalization;

...

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

Wird zurückkehren:

"16/08/2016"
Mikael Engver
quelle
Wenn der Entwickler die Zeichenfolgenmethode mit einigen Buchstaben wie M m ss usw. verwendet, wird mit Ihrer Lösung ein falsches Ergebnis erzielt, z. B. Datetime.Now.ToString ("JJJJ / TT / MM / Monat", CultureInfo.InvariantCulture) wird 2017/01 nicht angezeigt / 02 / Monat wird es 2017/01/02 / 2onth
Okan SARICA
@OkanSARICA Wenn Sie das Datum mit "/ Monat" versehen möchten, sollten Sie dies stattdessen nach der ToString-Methode tun. DateTime.Now.ToString (”JJJJ / MM / TT”, CultureInfo.InvariantCulture) + ”/ Monat”;
Mikael Engver
1

Wenn Sie MVC-Tabellen verwenden, funktioniert dies folgendermaßen:

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