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?


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


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

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


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"

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>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.