设为首页 加入收藏

TOP

SystemTimeToFileTime、FileTimeToLocalFileTime、LocalFileTimeToFileTime三函数的跨平台实现(二)
2015-07-24 05:40:46 来源: 作者: 【 】 浏览:11
Tags:SystemTimeToFileTime FileTimeToLocalFileTime LocalFileTimeToFileTime 三函数 跨平台 实现
teTime};
uli.QuadPart += ((ULONGLONG)nTimeZoom * 60 * 60 * 1000 * 1000 * 10);
lpLocalFileTime->dwLowDateTime = uli.LowPart;
lpLocalFileTime->dwHighDateTime = uli.HighPart;


return TRUE;
}


BOOL LocalFileTimeToFileTime2(__in CONST FILETIME *lpLocalFileTime, __out LPFILETIME lpFileTime)
{
if (NULL == lpLocalFileTime || NULL == lpFileTime)
return FALSE;


// 获取时区
time_t tt = 0;
struct tm *ptm = NULL;
tt = ::time(&tt);
ptm = ::localtime(&tt);
int nHourLocal = ptm->tm_hour;
ptm = ::gmtime(&tt);
int nHourUTC = ptm->tm_hour;
int nTimeZoom = nHourLocal - nHourUTC;


ULARGE_INTEGER uli = {lpLocalFileTime->dwLowDateTime, lpLocalFileTime->dwHighDateTime};
uli.QuadPart -= ((ULONGLONG)nTimeZoom * 60 * 60 * 1000 * 1000 * 10);
lpFileTime->dwLowDateTime = uli.LowPart;
lpFileTime->dwHighDateTime = uli.HighPart;


return TRUE;
}


int main()
{
SYSTEMTIME stLocal, stUTC;
FILETIME ftLocal, ftUTC, ftLocal2, ftUTC2;
ULARGE_INTEGER uliLocal, uliUTC, uliLocal2, uliUTC2;


::GetLocalTime(&stLocal); // 获取本地时间
::GetSystemTime(&stUTC); // 获取UTC时间
printf("Local System Time: %d-%d-%d %d:%d:%d\n", stLocal.wYear, stLocal.wMonth,
stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
printf("UTC System Time : %d-%d-%d %d:%d:%d\n\n", stUTC.wYear, stUTC.wMonth,
stUTC.wDay, stUTC.wHour, stUTC.wMinute, stUTC.wSecond);


SystemTimeToFileTime2(&stLocal, &ftLocal); // 本地时间转化成FILETIME结构
SystemTimeToFileTime2(&stUTC, &ftUTC); // UTC时间转化成FILETIME结构
uliLocal.LowPart = ftLocal.dwLowDateTime;
uliLocal.HighPart = ftLocal.dwHighDateTime;
uliUTC.LowPart = ftUTC.dwLowDateTime;
uliUTC.HighPart = ftUTC.dwHighDateTime;
printf("Local File Time : %llu\n", uliLocal.QuadPart);
printf("UTC File Time : %llu\n", uliUTC.QuadPart);
printf("Diff File Time : %llu = 8*60*60*1000*1000*10(单位为100ns)\n\n", uliLocal.QuadPart - uliUTC.QuadPart);


FileTimeToLocalFileTime2(&ftUTC, &ftLocal2); // 将UTC的FILETIME时间转换为对应的本地的FILETIME时间。
LocalFileTimeToFileTime2(&ftLocal, &ftUTC2); // 将本地的FILETIME时间转换为对应的UTC的FILETIME时间。
uliLocal2.LowPart = ftLocal2.dwLowDateTime;
uliLocal2.HighPart = ftLocal2.dwHighDateTime;
uliUTC2.LowPart = ftUTC2.dwLowDateTime;
uliUTC2.HighPart = ftUTC2.dwHighDateTime;
printf("Local File Time from UTC File Time : %llu\n", uliLocal2.QuadPart);
printf("UTC File Time from Local File Time : %llu\n\n", uliUTC2.QuadPart);


system("pause");
return EXIT_SUCCESS;
}


/*///////////////////////// 运行打印开始 //////////////////////////
Local System Time: 2014-7-6 18:11:37
UTC System Time : 2014-7-6 10:11:37


Local File Time : 130491438974890000
UTC File Time : 130491150974890000
Diff File Time : 288000000000 = 8*60*60*1000*1000*10(单位为100ns)


Local File Time from UTC File Time : 130491438974890000
UTC File Time from Local File Time : 130491150974890000


请按任意键继续. . .
////////////////////////// 运行打印结束 /////////////////////////*/
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 3093 Margaritas on the Rive.. 下一篇二叉树三种遍历非递归算法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: