C++ c++;\将文件时间转换为秒

C++ c++;\将文件时间转换为秒,c++,windows,comparison,filetime,C++,Windows,Comparison,Filetime,如何将FILETIME转换为秒?我需要比较两个FILETIME对象 我发现,, 但似乎它不起作用 ULARGE_INTEGER ull; ull.LowPart = lastWriteTimeLow1; ull.HighPart = lastWriteTimeHigh1; time_t lastModified = ull.QuadPart / 10000000ULL - 11644473600ULL; ULARGE_INTEGER xxx; xxx

如何将FILETIME转换为秒?我需要比较两个FILETIME对象

我发现,, 但似乎它不起作用

 ULARGE_INTEGER ull;
    ull.LowPart = lastWriteTimeLow1;
    ull.HighPart = lastWriteTimeHigh1;
    time_t lastModified =  ull.QuadPart / 10000000ULL - 11644473600ULL;

    ULARGE_INTEGER xxx;
    xxx.LowPart = currentTimeLow1;
    xxx.HighPart = currentTimeHigh1;
    time_t current =  xxx.QuadPart / 10000000ULL - 11644473600ULL;

    unsigned long SecondsInterval = current - lastModified;

    if (SecondsInterval > RequiredSecondsFromNow)
        return true;

    return false;
我比较了2个文件时间,预计相差10秒,它给了我~7000。。。
这是提取秒数的好方法吗?

您给出的代码似乎是正确的,它将FILETIME转换为UNIX时间戳(显然会失去精度,因为FILETIME的理论分辨率为100纳秒)。您确定您比较的文件时间确实只有10秒的差异吗

实际上,我在一些软件中使用了非常类似的代码:

double time_d()
{
  FILETIME ft;
  GetSystemTimeAsFileTime(&ft);
  __int64* val = (__int64*) &ft;
  return static_cast<double>(*val) / 10000000.0 - 11644473600.0;   // epoch is Jan. 1, 1601: 134774 days to Jan. 1, 1970
}
double time_d()
{
文件时间ft;
GetSystemTimeAsFileTime(&ft);
__int64*val=(u int64*)&ft;
返回静态_cast(*val)/10000000.0-116444473600.0;//纪元为1601年1月1日:至1970年1月1日的134774天
}

这将返回一个类似UNIX的时间戳(自1970年以来以秒为单位),分辨率为亚秒。

为了便于比较

double toSeconds(const FILETIME& t)
{
    return LARGE_INTEGER{t.dwLowDateTime, (long)t.dwHighDateTime}.QuadPart * 1e-7;
}

是最简单的。

如何比较FILETIME对象?与其比较两个不同的变量,不如尝试通过输出格式化的FILETIME变量来检查转换代码,然后将相同的FILETIME变量转换为time,并输出(格式化的)结果。不应该有任何区别(除了精度的损失)。我不在C++背景下,我希望我知道怎么做。我会添加完整的代码,你会决定。我想也许它不包括我的时区(+02:00)当我现在的日期?是的,我的时间代码()代码也只在Windows上运行…关于另一个评论,实际上这可能是一个时区问题。您是否使用相同的函数获取时间戳?似乎您没有您认为的时间戳。作为一种调试措施,尝试将两个文件时间结构转换为系统时间结构,并查看时间的实际间隔。实际上,如何在代码中获取本地时间?确保以UTC而不是本地时间获取(例如,如果使用GetLocalTime(),则应为GetSystemTime()),否则会因时区而有所不同(文件时间以UTC为单位)。