Freigeben über


SetTimeZoneInformation-Funktion (timezoneapi.h)

Legt die aktuellen Zeitzoneneinstellungen fest. Diese Einstellungen steuern Übersetzungen von koordinierter Weltzeit (UTC) zu Ortszeit.

Verwenden Sie die SetDynamicTimeZoneInformation-Funktion , um Grenzen für die Sommerzeit zu unterstützen, die sich von Jahr zu Jahr ändern.

Syntax

BOOL SetTimeZoneInformation(
  [in] const TIME_ZONE_INFORMATION *lpTimeZoneInformation
);

Parameter

[in] lpTimeZoneInformation

Ein Zeiger auf eine TIME_ZONE_INFORMATION-Struktur , die die neuen Einstellungen enthält.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Eine Anwendung muss über die berechtigung SE_TIME_ZONE_NAME verfügen, damit diese Funktion erfolgreich ist. Diese Berechtigung ist standardmäßig deaktiviert. Verwenden Sie die Funktion AdjustTokenPrivileges , um die Berechtigung vor dem Aufruf von SetTimeZoneInformation zu aktivieren, und deaktivieren Sie dann die Berechtigung nach dem SetTimeZoneInformation-Aufruf . Weitere Informationen finden Sie unter Ausführen mit speziellen Berechtigungen.

Windows Server 2003 und Windows XP/2000: Die Anwendung muss über die berechtigung SE_SYSTEMTIME_NAME verfügen.

Wichtig

Rufen Sie ab Windows Vista und Windows Server 2008 bis zu allen aktuellen Versionen von Windows SetDynamicTimeZoneInformation anstelle von SetTimeZoneInformation auf, um Systemzeitzoneninformationen festzulegen. SetDynamicTimeZoneInformation unterstützt den vollständigen Verlauf der Änderungen an der Standardzeit und sommerzeit, die von den dynamischen Daten in der Windows-Registrierung bereitgestellt werden. Wenn eine Anwendung SetTimeZoneInformation verwendet, wird die dynamische Sommerzeitunterstützung für das System deaktiviert und die Meldung "Ihre aktuelle Zeitzone wird nicht erkannt. Wählen Sie eine gültige Zeitzone aus." wird dem Benutzer in den Windows-Zeitzoneneinstellungen angezeigt.

Um Explorer darüber zu informieren, dass sich die Zeitzone geändert hat, senden Sie die WM_SETTINGCHANGE Nachricht.

Alle Übersetzungen zwischen UTC und Ortszeit basieren auf der folgenden Formel:

UTC = Ortszeit + Verzerrung

Die Verzerrung ist der Unterschied in Minuten zwischen UTC und Ortszeit.

Beispiele

Im folgenden Beispiel wird die aktuelle Zeitzone angezeigt. Anschließend wird die Zeitzone um eine Zone westlich angepasst. Die alten und neuen Zeitzonennamen werden angezeigt. Sie können die Änderungen auch mithilfe von Datum und Uhrzeit in Systemsteuerung überprüfen. Der neue Name wird auf der Registerkarte Datum&Uhrzeit als aktuelle Zeitzone angezeigt. Die neue Zeitzone wird in der Dropdownliste auf der Registerkarte Zeitzone angezeigt. Um diese Änderungen rückgängig zu machen, wählen Sie einfach Ihre alte Zeitzone aus der Dropdownliste aus.

#define UNICODE 1
#define _UNICODE 1

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <strsafe.h>

int main()
{
   TIME_ZONE_INFORMATION tziOld, tziNew, tziTest;
   DWORD dwRet;

   // Enable the required privilege

   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;

   OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
   LookupPrivilegeValue(NULL, SE_TIME_ZONE_NAME, &tkp.Privileges[0].Luid);
   tkp.PrivilegeCount = 1;
   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);

   // Retrieve the current time zone information

   dwRet = GetTimeZoneInformation(&tziOld);

   if(dwRet == TIME_ZONE_ID_STANDARD || dwRet == TIME_ZONE_ID_UNKNOWN)    
      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 0;
   }

   // Adjust the time zone information

   ZeroMemory(&tziNew, sizeof(tziNew));
   tziNew.Bias = tziOld.Bias + 60;
   StringCchCopy(tziNew.StandardName, 32, L"Test Standard Zone");
   tziNew.StandardDate.wMonth = 10;
   tziNew.StandardDate.wDayOfWeek = 0;
   tziNew.StandardDate.wDay = 5;
   tziNew.StandardDate.wHour = 2;

   StringCchCopy(tziNew.DaylightName, 32, 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 0;
   }

   // Retrieve and display the newly set time zone information

   dwRet = GetTimeZoneInformation(&tziTest);

   if(dwRet == TIME_ZONE_ID_STANDARD || dwRet == TIME_ZONE_ID_UNKNOWN)    
      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());

   // Disable the privilege

   tkp.Privileges[0].Attributes = 0; 
   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 

   return 1;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile timezoneapi.h (Einschließen von Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

GetTimeZoneInformation

SetDynamicTimeZoneInformation

TIME_ZONE_INFORMATION

Zeitfunktionen