DateTime.TryParseExact () завершается ошибкой из-за информации о культуре потока - PullRequest
4 голосов
/ 11 января 2012

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 11 января 2012

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

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

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

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

0 голосов
/ 11 января 2012

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

...