我想检查许多文件,其中的LastWriteTimes是相同的日期,系统的昨天或不。我的问题是如何以SYSTEMTIME格式设置昨天的日期.下面是我的代码。
bool checkLastWriteTime(FILETIME ftLastWriteTime)
{
SYSTEMTIME stUTC, stLocal;
// Convert the last-write time to local time.
FileTimeToSystemTime(&ftLastWriteTime, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
// Build a string showing the date and time.
_tprintf(TEXT("%02d/%02d/%d %02d:%02d\n"),
stLocal.wMonth, stLocal.wDay, stLocal.wYear,
stLocal.wHour, stLocal.wMinute);
SYSTEMTIME localTime;
GetLocalTime(&localTime);
//
//How to get the date of yesterday from localTime?
//
if (stLocal.wYear == localTime.wYear && stLocal.wMonth == localTime.wMonth && stLocal.wDay == localTime.wDay)
{
return true;
}
else
{
return false;
}
}发布于 2015-03-09 14:50:36
“昨天”是一个范围。它很容易计算何时结束,这是发生在今天上午12 :00:
SYSTEMTIME now;
GetLocalTime(&now);
SYSTEMTIME stYesterdayEnd = { now.wYear, now.wMonth, now.wDayOfWeek, now.wDay };
FILETIME ftYesterdayEnd;
SystemTimeToFileTime(&stYesterdayEnd, &ftYesterdayEnd);在那之前24小时开始的。所以你需要从ftYesterdayEnd中减去100纳秒单位。使用FILETIME有点棘手,我们将使用LARGE_INTEGER来简化操作:
LARGE_INTEGER liYesterdayBeg = { ftYesterdayEnd.dwLowDateTime, ftYesterdayEnd.dwHighDateTime };
ULONGLONG oneday = 24ULL * 60 * 60 * 1000 * 1000 * 10;
liYesterdayBeg.QuadPart -= oneday;
FILETIME ftYesterdayBeg = { liYesterdayBeg.LowPart, liYesterdayBeg.HighPart };现在,您可以编写函数了:
bool wasWrittenYesterday(FILETIME ftLastWriteTime)
{
// As above
//...
return ftLastWriteTime >= ftYesterdayBeg && ftLastWriteTime < ftYesterdayEnd
}发布于 2015-03-09 14:57:07
您需要将SYSTEMTIME转换为FILETIME,然后减去日期,然后再转换为SYSTEMTIME。
就像这样:
FILETIME ft;
ULARGE_INTEGER uli;
__int64 oneDay;
GetLocalTime(&localTime);
SystemTimeToFileTime(&localTime, &ft);
memcpy(&uli, (ULARGE_INTEGER *)&ft, sizeof(ULARGE_INTEGER));
// get one day in 100ns parts
oneDay = (__int64)10 * (__int64)1000 * (__int64)1000;
oneDay *= (__int64)60 * (__int64)60 * (__int64)24;
// subtract one day
uli.QuadPart -= oneDay;
FileTimeToSystemTime((LPFILETIME)&uli, &localTime);运行此代码后,localTime现在包含- 24小时。
参见系统引用中的备注
https://stackoverflow.com/questions/28941474
复制相似问题