Delphi. Преобразовать строку в дату используя полный/длинный формат

Рейтинг: 2Ответов: 0Опубликовано: 19.01.2023

Есть задача написать парсер текстовых логов стороннего приложения, код и настройки которого менять нельзя.

К сожалению, приложение использует формат даты из настроек 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?

Ответы

Ответов пока нет.