почему DateTime.ToString («дд / мм / гггг») дает мне дд-мм-гггг?

155

Я хочу, чтобы моя дата и время конвертировались в строку в формате "дд / мм / гггг"

Всякий раз, когда я конвертирую это используя DateTime.ToString("dd/MM/yyyy"), я получаю dd-MM-yyyyвместо этого.

Есть ли какая-то информация о культуре, которую я должен установить?

Дисковод
источник
do DateTime.ToString ("дд / мм / гггг");
Jimplode
2
Я сделал это, это не сработало, проблема не в датах, а в «-», я хочу, чтобы это было «/», как я указал
Diskdrive
7
используйте MM вместо mm - mm обозначает минуты, а не месяцы.
Ллойд Пауэлл
Документация MSDN для DateTime.ToString безнадежно неверна: « Например, строка формата« MM / dd / yyyyHH: mm »отображает строку даты и времени в фиксированном формате ... В строке формата используется« / »в качестве фиксированной разделитель даты независимо от настроек, специфичных для данной культуры. "
полковник Паник

Ответы:

243

Косая черта - это разделитель даты, поэтому будет использоваться текущий ограничитель даты культуры.

Если вы хотите жестко закодировать его, чтобы всегда использовать косую черту, вы можете сделать что-то вроде этого:

DateTime.ToString("dd'/'MM'/'yyyy")
Боян Белич
источник
2
@spender - в некоторых культурах они есть.
Дэниел А. Уайт,
Спасибо за Ваш быстрый ответ. Ты прав. Я дам вам правильный ответ
Diskdrive
6
Вы также можете использовать этот формат: dateTime.ToString (@ "yyyy \ / MM \ / dd")
base2
2
Экранирование строки формата с помощью обратной косой черты также работает: DateTime.Now.ToString ("dd \\ / MM \\ / yyyy");
TomB
61

Передайте CultureInfo.InvariantCulture в качестве второго параметра DateTime, он вернет строку как вам нужно, даже в очень специальном формате:

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

вернется: 28 | 02 | 2014

Лю Пэн
источник
Этот код более понятен, чем в принятом ответе (я имею в виду добавленный CultureInfo). Это выглядит как минимум лучше, чем избегать слешей апострофами.
Сергей
2
Определенно легче читать, чем с помощью escape-символов. Я немного шокирован тем, что не знал все время, что мои форматы дат будут перезаписаны!
Дикарь
10

Добавьте CultureInfo.InvariantCultureв качестве аргумента:

using System.Globalization;

...

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

Вернется:

"16/08/2016"
Микаэль Энгвер
источник
если разработчик использует метод tostring с некоторыми буквами, такими как M m ss и т. д., будет получен неверный результат с вашим решением, например Datetime.Now.ToString ("гггг / дд / мм / месяц", CultureInfo.InvariantCulture) не приведет к 2017/01 / 02 / Месяц: 2017/01/02/2-е
Okan SARICA
@OkanSARICA, если вы хотите добавить суффикс к дате «/ Месяц», вы должны сделать это после метода ToString. DateTime.Now.ToString («гггг / мм / дд», CultureInfo.InvariantCulture) + »/ месяц»;
Микаэль Энгвер
1

Если вы используете MVC, таблицы, это работает так:

<td>@(((DateTime)detalle.fec).ToString("dd'/'MM'/'yyyy"))</td>
Маурико Белло
источник
-3

Возможно, тупой вопрос / ответ, но вы пробовали dd/MM/yyyy? Обратите внимание на заглавные буквы.

mmв течение нескольких минут с ведущим нулем. Поэтому я сомневаюсь, что это то, что вы хотите.

Это может быть полезно: http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm

Kon
источник