Delphi. Indy. FTP. Как получить дату создания, изменения и последнего доступа на сервере от idFTP ?

Этот вопрос можно преобразовать в “как преобразовать 20160911195120 в 11.09.2016 19:51:20 и перевести в LocalTime?”

Я также поднял этот вопрос на 2 форумах

Русский форум

Английский форум

Также мне показалась интересной ссылка на TTimeZone  – класса, который появился, начиная с Delphi XE и избавил нас, в какой-то степени от зависимости от WinAPI

Ссылка на обзор на блоге про TTimeZone 

В сущности, получить даты создания, изменения и последнего доступа в Indy несложно, сделать это можно вот так…

Мы получим примерно вот такой результат

36

Как вытащить его оттуда? Да с помощью регулярок. Я чуть позже, в данном посте покажу как я это сделал. Мы получим число в формате 20160911195120. Но если распарсить его, то оно не локализовано, оно в GMT 0;

Как преобразовать 20160911195120 в 11.09.2016 19:51:20 и перевести в LocalTime?

Вопрос в другом – что далее с этим делать? Хотелось бы получить стандартную для Delphi дату и стандартное время в формате 11.06.2016 19:51:20.

Если присмотреться – это число состоит как раз из YYYY:MM:DD:HH:MM:SS – распарсить его несложно, например, при помощи вот такой функции

Но если сравнить полученные результат с часами на Windows, то получится, в большинстве случаев – разница на GMT. Скажем у меня была разница в 5 часов.  Время, записанное для файла было 19:51:20, а время на часах Windows 19:51:20 + 5 часов.

Indy, насколько я понимаю, выдаёт это число в GMT 0. Но что с ним делать дальше, даже после парсинга? Я провозился часа 3 над вопросом и у меня созрело вот такое решение.

Теперь результат выдается корректно. Я написал это в виде функции

 

Как вытащить 20160911195120 из массива данных при помощи регулярок?

Итак, есть у нас набор данных, выглядит он вот так…

36

Как вытащить дату и время создания и локализовать его?

Думаю, варианты тут разные возможны. Но вариант с регулярками мне показался оч. интересным и простым по реализации. Добавим TEdit на форму, для экспериментов с регулярками. Сразу посмотрим на результат

38

Показываю здесь кусок кода, который отвечает за вытаскивание, ниже покажу весь кусок кода на тестовой кнопке… Идея здесь в чем?

Сначала вытаскиваем все create=20160912214206 в отдельную коллекцию совпадений, потом вытаскиваем уже только 20160912214206 в другую коллекцию совпадений. Ну и собственно, загружаем это все в Memo, для иллюстрации.

Полный код тестовой кнопки выглядит вот так…

 

 

This entry was posted in Delphi, Indy. Bookmark the permalink.