|
发表于 2013-7-16 20:53:23
|
显示全部楼层
- #include <WinBase.h>
- #include <Windows.h>
- void UTCTime2LocalTime(void);
- bool IsLeapYear(unsigned int uiYear);
- void UTCTime2LocalTime(void)
- {
- TIME_ZONE_INFORMATION tzi;
- DWORD dwRet(GetTimeZoneInformation(&tzi));
- int iTimeZone((0-tzi.Bias)/60);
- printf("当前时区:%+-d\n",iTimeZone);
- SYSTEMTIME st,st_l;
- memset(&st,0,sizeof(SYSTEMTIME));
- memset(&st_l,0,sizeof(SYSTEMTIME));
- GetSystemTime(&st);
- memcpy(&st_l,&st,sizeof(SYSTEMTIME));
- //将UTC时间加上本地时区小时数
- st_l.wHour += iTimeZone;
- //根据加上时区后的时间刷新本地时间
- //根据小时数判断日期是否需要进位
- int iHourInterval(st_l.wHour/24);
- st_l.wHour %= 24;
- if(iHourInterval>0)
- {
- //小时数已经大于24,日期需要加1
- st_l.wDay += 1;
- //小时数加1后继续判断天数是否需要加1
- //要根据当前月份判断
- int iDays(0); //当月天数
- switch(st_l.wMonth)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- {
- iDays = 31;
- }
- break;
- case 2:
- {
- //2月份比较特殊,需要根据是不是闰年来判断当月是28天还29天
- iDays = IsLeapYear(st.wYear)?29:28;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- {
- iDays = 30;
- }
- break;
- }
- int iInterval(st_l.wDay-iDays);
- if(iInterval>0)
- {
- st_l.wDay = iInterval;
- st_l.wMonth += 1;
- //判断月份是否大于12,如果大于12,则年份需要再加1
- iInterval = st_l.wMonth/12;
- st_l.wMonth %= 12;
- if(iInterval>0)
- {
- st_l.wYear += 1;
- }
- }
- }
- printf("当前 UTC 日期时间: %04d-%02d-%02d %02d:%02d:%02d\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
- printf("当前 本地日期时间: %04d-%02d-%02d %02d:%02d:%02d\n",st_l.wYear,st_l.wMonth,st_l.wDay,st_l.wHour,st_l.wMinute,st_l.wSecond);
- SYSTEMTIME st_cn;
- GetLocalTime(&st_cn);
- printf("当前 中国标准日期时间: %04d-%02d-%02d %02d:%02d:%02d\n",st_l.wYear,st_l.wMonth,st_l.wDay,st_l.wHour,st_l.wMinute,st_l.wSecond);
- }
- bool IsLeapYear(unsigned int uiYear)
- {
- return (((uiYear%4)==0)&&((uiYear%100)!=0))||((uiYear%400)==0);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|