Функция SetTimeZoneInformation


Функция 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 Нет
Замечания по платформе Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz