Проблема в том, что SystemTimeToFileTime() конвертает время последней модификации файла без учета часовой зоны,
то есть устанавливает время по Гринвичу, хотя для этого дела там существует функция FileTimeToLocalTime()
И в итоге получается что дата становится больше на 3 часа, а летом соответственно на 4!
Просто отнять эти 3 часа не получается, так как дата хранится в 64-битной структуре, а как производить всякие арифметические действия я так и не нашел!
Есть правда 64-битный тип LARGE_INTEGER, но это тоже union с двумя 32-битными полями..... ;-(
Как быть?
Здравствуйте Taleisin, Вы писали:
T>Проблема в том, что SystemTimeToFileTime() конвертает время последней модификации файла без учета часовой зоны,
T>то есть устанавливает время по Гринвичу, хотя для этого дела там существует функция FileTimeToLocalTime()
T>И в итоге получается что дата становится больше на 3 часа, а летом соответственно на 4!
T>Просто отнять эти 3 часа не получается, так как дата хранится в 64-битной структуре, а как производить всякие арифметические действия я так и не нашел!
T>Есть правда 64-битный тип LARGE_INTEGER, но это тоже union с двумя 32-битными полями..... ;-(
T>Как быть?
Про время системное и локальное вопроса не понял, но как работать с FILETIME могу сказать:
1. просто привести к 64-битному целому
#define FT_24HOUR (864000000000ui64)
FILETIME ft;
*(unsigned __int64*)&ft=FT_24HOUR;
unsigned __int64 *pft=(unsigned __int64*)&ft;
(*pft)+=234;
//и т.д.
2. использовать MFC класс CTime