Я пытаюсь найти способ преобразовать структуру FILETIME
из UTC в локальную и наоборот.
Я использовал две функции: FileTimetoLocalFileTime()
и LocalFileTimeToFileTime()
. Кажется, проблема в том, что они работают не так, как ожидалось.
Как пример: сначала я получил локальное время файла, используя:
WIN32_FIND_DATA fd;
FindFirstFile(_T("Path:To:File"), &fd);
теперь fd имеет дату последней записи в локальном формате.
Затем я использую LocalFileTimeToFileTime()
для преобразования даты последней записи в UTC, а затем преобразовываю эту структуру FILETIME в 64-разрядное целое число, как описано в MSDN. http://support.microsoft.com/kb/188768
Затем я сохраню этот номер в БД для дальнейшего использования.
Теперь, когда я, например, меняю часовой пояс, я получаю 64-битное целое число из БД. Преобразуйте его в структуру FILETIME
, а затем попытайтесь преобразовать его в локальное значение. Использование FileTimeToLocalFileTime()
. Проблема в том, что когда я сравниваю время файла с местным временем того же файла и, конечно, проверяю, что в файл не было внесено никаких изменений. Времена разные. Я не уверен почему, но так каждый раз.
Я также хотел бы знать, существует ли возможный способ преобразования FILETIME
в читаемую строку. Без использования CTime or SYSTEMTIME
, поскольку они оба преобразуют FILETIME
в его UTC-эквивалент, который мне не нужен, поскольку я хотел бы видеть точное преобразованное время из обеих функций LocalFileTimeToFileTime() and FileTimeToLocalFileTime().
Надеюсь, я объяснил ситуацию, и надеюсь, что кто-нибудь поможет мне достичь моей цели