Функция SetTimeZoneInformation устанавливает параметры текущего часового пояса. Эти параметры управляют преобразованием из Универсального глобального времени (UTC) в местное время.
BOOL SetTimeZoneInformation( const TIME_ZONE_INFORMATION* lpTimeZoneInformation ); |
lpTimeZoneInformation
[in] Указатель на структуру TIME_ZONE_INFORMATION, которая содержит устанавливаемые параметры часового пояса.
Если функция завершается успешно, возвращаемое значение не нуль.
Если функция завершается ошибкой, возвращаемое значение нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Чтобы сообщить программе Explorer, что изменился часовой пояс, пошлите сообщение WM_SETTINGCHANGE.
Все преобразования между UTC и локальным временем основываются на ниже следующей формуле:
UTC = local time + bias |
Слагаемое bias является разницей, в минутах, между UTC и местным временем.
Чтобы запретить автоматическую подстройку на летнее время, используйте нижеследующее значение реестра:
HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \TimeZoneInformation \DisableAutoDaylightTimeSet |
Пример ниже показывает текущий часовой пояс, затем настраивает часовой пояс одной зоны на западе. Старое и новое названия часового пояса показываются на экране. Вы можете также проверить изменения, используя службу Дата и время в Панели Управления. Новое название показывается на вкладке Дата и Время (Date&Time) как Текущий часовой пояс (Current Time Zone). Новый часовой пояс показывается в выпадающем списке на вкладке Часовой пояс (Time Zone). Чтобы отменить эти изменения, просто выберите свой старый часовой пояс из выпадающего списка.
#include <windows.h> #include <stdio.h> #include <string.h> void main() { TIME_ZONE_INFORMATION tziOld, tziNew, tziTest; DWORD dwRet; dwRet = GetTimeZoneInformation(&tziOld); if( dwRet == TIME_ZONE_ID_STANDARD ) wprintf(L"%s\n", tziOld.StandardName); else if( dwRet == TIME_ZONE_ID_DAYLIGHT ) wprintf(L"%s\n", tziOld.DaylightName); else { printf("GTZI failed (%d)\n", GetLastError()); return; } ZeroMemory(&tziNew, sizeof(tziNew)); tziNew.Bias = tziOld.Bias + 60; wcscpy(tziNew.StandardName, L"Test Standard Zone"); tziNew.StandardDate.wMonth = 10; tziNew.StandardDate.wDayOfWeek = 0; tziNew.StandardDate.wDay = 5; tziNew.StandardDate.wHour = 2; wcscpy(tziNew.DaylightName, L"Test Daylight Zone"); tziNew.DaylightDate.wMonth = 4; tziNew.DaylightDate.wDayOfWeek = 0; tziNew.DaylightDate.wDay = 1; tziNew.DaylightDate.wHour = 2; tziNew.DaylightBias = -60; if( !SetTimeZoneInformation( &tziNew ) ) { printf("STZI failed (%d)\n", GetLastError()); return; } dwRet = GetTimeZoneInformation(&tziTest); if( dwRet == TIME_ZONE_ID_STANDARD ) wprintf(L"%s\n", tziTest.StandardName); else if( dwRet == TIME_ZONE_ID_DAYLIGHT ) wprintf(L"%s\n", tziTest.DaylightName); else printf("GTZI failed (%d)\n", GetLastError()); } |
Обзор Время (операционной системы), Функции, используемые для времени, GetTimeZoneInformation, TIME_ZONE_INFORMATION
Размещение и совместимость SetTimeZoneInformation | ||
К | Windows Vista | Да |
л | Windows XP | Да |
и | Windows 2000 Professional | Да |
е | Windows NT Workstation | Да |
н | Windows Me | Да |
т | Windows 98 | Да |
Windows 95 | Да | |
С | Windows Server 2008 | Да |
е | Windows Server 2003 | Да |
р | Windows 2000 Server | Да |
в | Windows NT Server | Да |
е | ||
р | ||
Используемая библиотека | Kernel32.lib | |
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в | Winbase.h | |
- включено в | Windows.h | |
Unicode | Нет | |
Замечания по платформе | Не имеется |