Вопрос по функции SetFileTime, TDateTime и FILETIME

Всемприветэтоя!
Дата: 07.05.2011 19:57:14
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 ?
Нелояльный
Дата: 07.05.2011 23:37:43
Вызывайте свою функцию и сравнивайте результат с нулем:
IsValidFileTime := Int64(DateTimeToFileTime(дата-время)) > 0;