[VC]设置本机系统时间
由于OS是Win7,可能是由于权限的问题,调用SetLocalTime函数不成功,
于是乎我又调用了SetSystemTime函数,结果可以更新系统时间,但是却比我传入的时间晚了8个小时
你知道为什么呢?
查查资料吧,呵呵~~~
~~哈哈,原来,原因如下:
GetSystemTime 以及SetSystemTime函数返回的是 协调通用时间(UTC,也称为格林威治时间)。
若要获得本地时间,必须加上或减去您所在的时区与 UTC 之间相差的小时数。
例如,UTC 中的 24:00(午夜)是纽约的 19:00 -- 负 5 小时的偏移量 (UTC–5)。
若要确定您所在时区的 UTC 偏移量,请参见“日期和时间属性”的“时区”选项卡。
因此,我采用如下的代码来处理:(dtInputTime是传入的时间)
COleDateTimeSpan dtsOffset(0, 8, 0, 0); // UTC+8东八区
COleDateTime dtUTC = dtInputTime - dtsOffset;
COleDateTime dtNow = dtUTC;
{
SYSTEMTIME SystemTime;
SystemTime.wYear = dtNow.GetYear();
SystemTime.wMonth = dtNow.GetMonth();
SystemTime.wDayOfWeek = dtNow.GetDayOfWeek();
SystemTime.wDay = dtNow.GetDay();
SystemTime.wHour = dtNow.GetHour();
SystemTime.wMinute = dtNow.GetMinute();
SystemTime.wSecond = dtNow.GetSecond();
// 修改本机系统时间
if (SetSystemTime(&SystemTime))
{
CString strLogMessage;
strLogMessage.Format(L"更新系统时间成功!");
}
else
{
CString strLogMessage;
strLogMessage.Format(L"更新系统时间失败[SetSystemTime返回0]!");
}
}