天天看點

[VC]設定本機系統時間

[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]!");

   }

  }