dlaczego DateTime.ToString („dd / MM / yyyy”) daje mi dd-MM-yyyy?

155

Chcę, aby moja data i godzina została przekonwertowana na ciąg w formacie „dd / MM / rrrr”

Za każdym razem, gdy konwertuję go za pomocą DateTime.ToString("dd/MM/yyyy"), otrzymuję dd-MM-yyyyzamiast tego.

Czy muszę ustawić jakieś informacje o kulturze?

Napęd
źródło
do DateTime.ToString ("dd / MM / rrrr");
jimplode
2
Zrobiłem to, nie zadziałało, problem nie dotyczy dat, jest to „-”, chcę, aby był to „/”, jak
wskazałem
7
użyj MM zamiast mm - mm oznacza minuty, a nie miesiące.
Lloyd Powell
1
możliwy duplikat Jak sformatować datę z ukośnikami w C #
Dzyann
Dokumentacja MSDN dotycząca DateTime.ToString jest beznadziejnie błędna: „ Na przykład ciąg formatu„ MM / dd / rrrrHH: mm ”wyświetla ciąg daty i godziny w ustalonym formacie ... Ciąg formatu używa znaku„ / ”jako stałego separator daty niezależnie od ustawień specyficznych dla kultury.
Colonel Panic,

Odpowiedzi:

243

Ukośnik jest ogranicznikiem daty, dzięki czemu będzie używany ogranicznik daty bieżącej kultury.

Jeśli chcesz zakodować go na stałe, aby zawsze używał ukośnika, możesz zrobić coś takiego:

DateTime.ToString("dd'/'MM'/'yyyy")
Bojan Bjelic
źródło
2
@spender - w niektórych kulturach tak jest.
Daniel A. White
Dziękuję za szybką odpowiedź. Masz rację. Dam ci poprawną odpowiedź
Diskdrive,
6
Możesz również użyć tego formatu: dateTime.ToString (@ "rrrr \ / MM \ / dd")
podstawa2
2
Ucieczka do ciągu formatu przy użyciu odwrotnego ukośnika również działa: DateTime.Now.ToString ("dd \\ / MM \\ / rrrr");
TomB
61

Przekaż CultureInfo.InvariantCulture jako drugi parametr DateTime, zwróci ciąg zgodnie z oczekiwaniami, nawet w bardzo specjalnym formacie:

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

wróci: 28 | 02 | 2014

Liu Peng
źródło
Ten kod jest bardziej czytelny niż w zaakceptowanej odpowiedzi (mam na myśli dodany CultureInfo). Wygląda przynajmniej lepiej niż unikanie cięć apostrofami.
Siergiej
2
Zdecydowanie łatwiejsze do odczytania niż użycie znaków ucieczki. Jestem trochę zszokowany, że nie wiedziałem przez cały czas, że moje formaty dat zostaną nadpisane!
Savage,
10

Dodaj CultureInfo.InvariantCulturejako argument:

using System.Globalization;

...

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

Wróci:

"16/08/2016"
Mikael Engver
źródło
jeśli programista użyje metody tostring z niektórymi literami, takimi jak M m ss itp., otrzyma nieprawidłowy wynik z rozwiązaniem, na przykład Datetime.Now.ToString ("rrrr / dd / mm / Month", CultureInfo.InvariantCulture) nie da wyniku 2017/01 / 02 / Miesiąc to wypadnie 2017/01/02/2 miesiąc
Okan SARICA
@OkanSARICA jeśli chcesz dodać do daty sufiks „/ Month”, powinieneś zrobić to po metodzie ToString. DateTime.Now.ToString („rrrr / MM / dd”, CultureInfo.InvariantCulture) + ”/ Month”;
Mikael Engver
1

Jeśli używasz MVC, tabel, działa to tak:

<td>@(((DateTime)detalle.fec).ToString("dd'/'MM'/'yyyy"))</td>
Maurico Bello
źródło