各位高手,兄弟最近做一个关于世界时区转换的界面,类似Windows下的那个时区,但在时区转换算法上有些问题,请大家帮忙分析下.
32816, "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi"
32817, "(GMT+05:45) Kathmandu"
32818, "(GMT+06:00) Astana, Dhaka"
32819, "(GMT+06:00) Sri Jayawardenepura"
32820, "(GMT+06:00) Almaty, Novosibirsk"
32821, "(GMT+06:30) Rangoon"
32822, "(GMT+07:00) Bangkok, Hanoi, Jakarta"
32823, "(GMT+07:00) Krasnoyarsk"
整数时间还好说,像上面那种5:30和5:45转换时会有问题.大家看看我的代码.
int TimeZonestrModify[] = {-720,-660,-600,-540,-480,-420,-420,-420,-360,-360,
-360,-300,-300,-300,-240,-240,-240,-210,-180,-180,-180,-120,-60,-60,0,0,60,60,
60,60,60,120,120,120,120,120,120,180,180,180,180,210,240,240,270,300,300,330,
345,360,360,360,390,420,420,480,480,480,480,480,540,540,540,570,570,600,600,600,
600,600,660,720,720,780};
我按分钟想避免了一些问题
SYSTEMTIME stime;
GetLocalTime(&stime);
int hour,month,day,year;
int maxDay = MaxDayNum(stime.wYear,stime.wMonth);
hour = (int)stime.wHour + (TimeZonestrModify[CurrentID]-TimeZonestrModify[OldID])/60;
//感觉是这里的问题,
year = stime.wYear;
month = stime.wMonth;
day = stime.wDay;
ModifyDateAndTime(&year,&month,&day,&hour);
stime.wDay = day;
stime.wYear = year;
stime.wMonth = month;
stime.wHour = hour;
SetLocalTime(&stime);
TIME_ZONE_INFORMATION timeZoneInfo;
GetTimeZoneInformation(&timeZoneInfo);
timeZoneInfo.Bias = 0 - TimeZonestrModify[CurrentID];//这里好着,按分钟转换
wcscpy(timeZoneInfo.StandardName,Standard_TimeZonestr);
SetTimeZoneInformation(&timeZoneInfo);
RegFlushKey(HKEY_LOCAL_MACHINE);
OldID = CurrentID;