FILETIME согласно справке начинается "...since January 1, 1601 (UTC)." Я так полагаю, что с 01.01.1601 00:00:00 ( ? ).
Для преобразования TDateTime в TFileTime использую следующую функцию:
function DateTimeToFileTime(const DateTime: TDateTime): TFileTime;
var
SysTime: TSystemTime;
begin
DateTimeToSystemTime(DateTime, SysTime);
SystemTimeToFileTime(SysTime, Result);
LocalFileTimeToFileTime(Result, Result);
end;
В Windows установлен часовой пояс "(GMT+03:00) Москва, Санкт-Петербург, Волгоград",
при котором могу установить время файла не раньше 01.01.1601
04:00:01
Если выбрать часовой пояс "(GMT) Время по Гринвичу...", то могу установить время файла не ранее 01.01.1601
01:00:01.
Как перед вызовом SetFileTime проверить, не является ли выбранная дата (TDateTime) ранее January 1, 1601 (UTC) ?
Сначала я думал просто сравнивать TDateTime с константой Since = -109205.0;
Но оказалось, что 01.01.1601 00:00:00 установить файлу не удается (хотя функция почему-то возвращает TRUE).
Пытался мудрить с GetTimeZoneInformation, но не хватило мудрости, запутался.
В общем, вопрос - как правильно проверить, что значение даты в TDateTime допустимо для функции SetFileTime ?