16,473
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
int main(int argc, char *argv[])
{
SYSTEMTIME st1 = { 0 };
SYSTEMTIME st2 = { 0 };
GetLocalTime(&st1);
memcpy(&st2, &st1, sizeof(SYSTEMTIME));
st2.wHour = 20;
st2.wMinute = 0;
st2.wSecond = 0;
st2.wMilliseconds = 0;
FILETIME ft1 = { 0 };
ULARGE_INTEGER ull1;
SystemTimeToFileTime(&st1, &ft1);
ull1.LowPart = ft1.dwLowDateTime;
ull1.HighPart = ft1.dwHighDateTime;
FILETIME ft2 = { 0 };
ULARGE_INTEGER ull2;
SystemTimeToFileTime(&st2, &ft2);
ull2.LowPart = ft2.dwLowDateTime;
ull2.HighPart = ft2.dwHighDateTime;
// 此处未判断 ull2.QuadPart 与 ull1.QuadPart大小。
// 如现在时间已经超过22:00结果肯定错误。
// 这里的 QuadPart 单位据 MSDN 上说是100纳秒。
// 如果你需要相差的秒数,请再加三个0。
DWORD dwMiliSecs = (DWORD)((ull2.QuadPart - ull1.QuadPart) / 10000ULL);
// 调用 Windows API 来格式化时间。当然你也可以自己写一段代码来计算。
TCHAR szInfo[1024] = { 0 };
StrFromTimeInterval(szInfo, 1024, dwMiliSecs, 3);
_tprintf(_T("从现在到晚上22:00还有%s。"), szInfo);
return 0;
}