DateTime.trarseExact () не удается из -за информации о культуре потока

StackOverflow https://stackoverflow.com/questions/8820912

Вопрос

У меня есть следующая строка кода в существующей реализации

DateTime.TryParseExact(
    "15/11/2021 00:00:00", 
    "dd/MM/yyyy HH:mm:ss",
    null,
    DateTimeStyles.None,
    out maturityDate);

который возвращается false Это означает, что пропущенная строка не может быть проанализирована. Это было действительно удивительно для меня, потому что шаблон здесь кажется точной. Согласно MSDN null значение в третьем параметре означает, что текущая информация о культуре будет использоваться (я предполагаю, что это Thread.CurrentThread.CurrentCulture).

Thread.CurrentThread.CurrentCulture В окне часов en-US, но экземпляр информации о культуре был изменен где -то в коде позже (форматеры даты времени или что -то еще).

Когда я прохожу CultureInfo.InvariantCulture или же new CultureInfo("en-US") все нормально.

Может ли кто -нибудь сказать, что вызывает неудачу TryParseExact Здесь когда null передается? Аналогичные вопросы не давали мне подсказки.

Это было полезно?

Решение

Если вы пройдете null, CurrentCulture будет использован.

Из документации MSDN для TryParseExact:

Если поставщик ничего не является, используется объект CultureInfo, который соответствует текущей культуре.

Это означает, что если текущая культура - это то, что использует различные сепараторы даты/времени, чем в вашей строке, Parse потерпит неудачу.

Другие советы

15/11/2021 не является действительным форматом даты США. 15.11.2021 IS. я считать культура, которую вы хотите en-GB

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top