Delphi. Преобразовать строку в дату используя полный/длинный формат
Есть задача написать парсер текстовых логов стороннего приложения, код и настройки которого менять нельзя.
К сожалению, приложение использует формат даты из настроек Windows. Его разработчик сообщил, что вызывает WinAPI-функцию GetDateFormat
.
Мой парсер запускается на той же машине в тот же день, то есть получить те же настройки Windows легко.
На одной из машин формат установлен «d MMMM yyyy 'г.'
», то есть в том месте, где должна быть дата я получаю подстроку вида «19 января 2023 г.
».
Функция System.SysUtils.StrToDateTime
падает в ошибку, так как ожидает увидеть строку из цифр, пробелов и FormatSettings.DateSeparator
, но не букв.
Даже если я сам разложу эту строку на составляющие, то есть сложность с тем, что «января
» = 1
, ведь в FormatSettings.LongMonthNames
название месяца хранится в именительном падеже («Январь
»).
Вероятно названия месяцев в родительном падеже можно получить через WinAPI GetLocaleInfo
с флагом LOCALE_RETURN_GENITIVE_NAMES
Вопрос: Есть ли в стандартной библиотека Delphi или в WinAPI функция преобразования строки в дату в соответствии с LongDateFormat
, то есть функция обратная к WinAPI GetDateFormat
?