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?


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


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")

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


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"

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>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.