С# TryParseExact CultureInfo.InvariantCulture Изменение поведения при изменении культуры

89
7

Я пытаюсь преобразовать дату со следующим форматом: "d/MM/yyyy"

пример:

    5/11/2014 12/12/2013 31/01/2012

Я использую метод TryParseExact:

private const string DateFormat = "d/MM/yyyy";
Culture = CultureInfo.InvariantCulture;
DateTime creationDateConverted;
DateTime.TryParseExact(creationDate, DateFormat, Culture,
DateTimeStyles.None, out creationDateConverted);

Метод отображения:

@Html.DisplayFor(m => object.date)

date having : DisplayFormat( DataFormatString="{0:d/MM/yyyy}")

Сервер, на котором размещен сайт, имеет американскую культуру.

если я установил культуру в fr-FR, используя Web.config, она работает хорошо.

Но если я не настрою эту культуру, это не сработает, оно конвертирует его в формат MM/dd/yyyy, и, конечно, какая-то дата не проходит с этим форматом.

Я не понимаю, почему культура повлияла на этот метод, потому что я предоставляю конкретный формат и культурный инвариант.

Я также пытался предоставить Культуру fr-Fr методу, но не повезло

EDIT: когда я говорю об ошибке, я имею в виду, что метод TryParseExact возвращает false

спросил(а) 2014-01-30T12:17:00+04:00 6 лет, 8 месяцев назад
1
Решение
82

DateTime не имеет формата. И вывод метода ToString зависит от культуры.

Если вы хотите, чтобы определенный формат использовал это:

creationDateConverted.ToString("d/MM/yyyy");

ответил(а) 2014-01-30T12:21:00+04:00 6 лет, 8 месяцев назад
41

Выбранный вами код анализа не зависит от настроек внешней культуры.


Тем не менее, культура может повлиять на то, что происходит, когда вы запрашиваете значение DateTime creationDateConverted.

ответил(а) 2014-01-30T12:32:00+04:00 6 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема