Класс DateTimeConvertor, который находится в Converters/ConvertHelpers.cs
, имеет несколько конструкторов, которые могут быть инициированы только с помощью формата или с использованием культуры. Если вы включаете культуру, то культура получается через
if (culture != null)
mCulture = CultureInfo.GetCultureInfo(culture);
При попытке преобразования в методе StringToField()
используется функция DateTime.TryParseExact ().
DateTime.TryParseExact(from.Trim(), mFormat, mCulture, DateTimeStyles.None, out val)
Если переменная mCulture не была установлена выше, то текущая культура используется, как было сказано ранее @niisK.
Документация Microsoft по этому вопросу в https://docs.microsoft.com/en-us/dotnet/api/system.datetime.tryparseexact?view=netframework-4.8 состояние:
Конкретные символы и строки даты и времени (например, названия дней недели на определенном языке), используемые в s, определяются параметром провайдера, как и точный формат s, если формат является стандартным форматом. строка спецификатора. Параметр провайдера может быть любым из следующих:
Объект CultureInfo, представляющий культуру, используемую для интерпретации s. Объект DateTimeFormatInfo, возвращаемый свойством DateTimeFormat, определяет символы и форматирование в s.
Объект DateTimeFormatInfo, определяющий формат данных даты и времени.
Пользовательская реализация IFormatProvider, метод GetFormat которой возвращает либо объект CultureInfo, либо объект DateTimeFormatInfo, предоставляющий информацию о форматировании.
Если поставщик имеет значение NULL, используется объект CultureInfo, соответствующий текущей культуре.
Итак, ошибки, с которыми вы столкнулись, могли быть связаны с конфликтом между форматом, который вы пытались использовать, и культурой, которая используется по умолчанию. Настройка культуры, как вы это сделали, скорее всего «исправит» проблему, но вы должны проверить, какая культура используется в следующий раз, поскольку она, вероятно, неверна в настройках панели управления / системы.