DateTime ToString ( "dd/MM/yyyy" ) возвращает dd.MM.yyyy

Я также попытался экранировать символ "/" в строке форматирования, но он не совсем сработал. Моя конечная цель - получить дату с символами "/" в качестве разделителей. Я предполагаю, что могу использовать DateTime.ToString("dd/MM/yyyy").Replace('.', '/'), но это немного страшно.

Ответ 1

Символы / в строках формата даты/времени означают "независимо от разделителя даты поставщика формата". Поскольку вы не предоставляете поставщика формата Thread.CurrentCulture, и в вашем случае текущая культура использует . как разделитель даты.

Если вы хотите использовать литеральную косую черту, поместите ее в одинарные кавычки:

dateTime.ToString("dd'/'MM'/'yyyy");

В качестве альтернативы вы можете указать поставщика формата, где разделитель дат /:

dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

Все вышеперечисленное задокументировано в MSDN.

Посмотрите разницу в живом примере.

Ответ 2

string s = dt.ToString("dd/M/yyyy", CultureInfo.InvariantCulture)

Ответ 3

Это связано с тем, что ToString работает по умолчанию в соответствии с текущей культурой:

Этот метод использует информацию форматирования, полученную из текущего культура.

Итак, переопределите это:

string date = dt.ToString("dd/M/yyyy", CultureInfo.InvariantCulture)

Ответ 4

Это работает (обратите внимание на InvariantCulture):

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

Если a CultureInfo не указано, будет использоваться CurrentCulture. Если это культура, которая не использует слэши в качестве разделителей в датах, она заменяется любым фактическим разделителем даты культуры.