diff --git a/include/freerdp/locale/timezone.h b/include/freerdp/locale/timezone.h deleted file mode 100644 index 1d062c8f1..000000000 --- a/include/freerdp/locale/timezone.h +++ /dev/null @@ -1,37 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Time Zone Redirection - * - * Copyright 2012 Marc-Andre Moreau - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FREERDP_LOCALE_TIMEZONE_H -#define FREERDP_LOCALE_TIMEZONE_H - -#include -#include -#include - -#ifdef __cplusplus - extern "C" { -#endif - -FREERDP_API void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone); - -#ifdef __cplusplus - } -#endif - -#endif /* FREERDP_LOCALE_TIMEZONE_H */ diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 268c6351e..a53054fab 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -21,6 +21,8 @@ #ifndef FREERDP_SETTINGS_H #define FREERDP_SETTINGS_H +#include + #include #include @@ -269,32 +271,6 @@ typedef struct _TARGET_NET_ADDRESS TARGET_NET_ADDRESS; #define ORIENTATION_LANDSCAPE_FLIPPED 180 #define ORIENTATION_PORTRAIT_FLIPPED 270 -/* SYSTEM_TIME */ -typedef struct -{ - UINT16 wYear; - UINT16 wMonth; - UINT16 wDayOfWeek; - UINT16 wDay; - UINT16 wHour; - UINT16 wMinute; - UINT16 wSecond; - UINT16 wMilliseconds; -} SYSTEM_TIME; - -/* TIME_ZONE_INFORMATION */ -struct _TIME_ZONE_INFO -{ - UINT32 bias; - char standardName[32]; - SYSTEM_TIME standardDate; - UINT32 standardBias; - char daylightName[32]; - SYSTEM_TIME daylightDate; - UINT32 daylightBias; -}; -typedef struct _TIME_ZONE_INFO TIME_ZONE_INFO; - /* ARC_CS_PRIVATE_PACKET */ typedef struct { @@ -977,7 +953,7 @@ struct rdp_settings UINT64 padding0896[896 - 837]; /* 837 */ /* Client Info (Time Zone) */ - ALIGN64 TIME_ZONE_INFO* ClientTimeZone; /* 896 */ + ALIGN64 LPTIME_ZONE_INFORMATION ClientTimeZone; /* 896 */ ALIGN64 char* DynamicDSTTimeZoneKeyName; /* 897 */ ALIGN64 BOOL DynamicDaylightTimeDisabled; /* 898 */ UINT64 padding0960[960 - 899]; /* 899 */ diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index c7d4b30ff..1002d1770 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -472,7 +472,7 @@ rdpSettings* freerdp_settings_new(DWORD flags) if (!settings->ServerAutoReconnectCookie) goto out_fail; - settings->ClientTimeZone = (TIME_ZONE_INFO*) calloc(1,sizeof(TIME_ZONE_INFO)); + settings->ClientTimeZone = (LPTIME_ZONE_INFORMATION) calloc(1,sizeof(TIME_ZONE_INFORMATION)); if (!settings->ClientTimeZone) goto out_fail; @@ -762,10 +762,10 @@ rdpSettings* freerdp_settings_clone(rdpSettings* settings) CopyMemory(_settings->ClientAutoReconnectCookie, settings->ClientAutoReconnectCookie, sizeof(ARC_CS_PRIVATE_PACKET)); CopyMemory(_settings->ServerAutoReconnectCookie, settings->ServerAutoReconnectCookie, sizeof(ARC_SC_PRIVATE_PACKET)); - _settings->ClientTimeZone = (TIME_ZONE_INFO*) malloc(sizeof(TIME_ZONE_INFO)); + _settings->ClientTimeZone = (LPTIME_ZONE_INFORMATION) malloc(sizeof(TIME_ZONE_INFORMATION)); if (!_settings->ClientTimeZone) goto out_fail; - CopyMemory(_settings->ClientTimeZone, settings->ClientTimeZone, sizeof(TIME_ZONE_INFO)); + CopyMemory(_settings->ClientTimeZone, settings->ClientTimeZone, sizeof(TIME_ZONE_INFORMATION)); _settings->TargetNetAddressCount = settings->TargetNetAddressCount; @@ -815,7 +815,7 @@ rdpSettings* freerdp_settings_clone(rdpSettings* settings) goto out_fail; } - if (_settings->DeviceArraySize < _settings->DeviceCount) + if (_settings->DeviceArraySize < _settings->DeviceCount) { _settings->DeviceCount = 0; _settings->DeviceArraySize = 0; diff --git a/libfreerdp/core/timezone.c b/libfreerdp/core/timezone.c index 95f06a356..48374fe58 100644 --- a/libfreerdp/core/timezone.c +++ b/libfreerdp/core/timezone.c @@ -22,9 +22,13 @@ #endif #include +#include #include "timezone.h" +static void rdp_read_system_time(wStream* s, SYSTEMTIME* system_time); +static void rdp_write_system_time(wStream* s, SYSTEMTIME* system_time); + /** * Read SYSTEM_TIME structure (TS_SYSTEMTIME).\n * @msdn{cc240478} @@ -32,7 +36,7 @@ * @param system_time system time structure */ -void rdp_read_system_time(wStream* s, SYSTEM_TIME* system_time) +void rdp_read_system_time(wStream* s, SYSTEMTIME* system_time) { Stream_Read_UINT16(s, system_time->wYear); /* wYear, must be set to 0 */ Stream_Read_UINT16(s, system_time->wMonth); /* wMonth */ @@ -51,7 +55,7 @@ void rdp_read_system_time(wStream* s, SYSTEM_TIME* system_time) * @param system_time system time structure */ -void rdp_write_system_time(wStream* s, SYSTEM_TIME* system_time) +void rdp_write_system_time(wStream* s, SYSTEMTIME* system_time) { Stream_Write_UINT16(s, system_time->wYear); /* wYear, must be set to 0 */ Stream_Write_UINT16(s, system_time->wMonth); /* wMonth */ @@ -76,34 +80,31 @@ void rdp_write_system_time(wStream* s, SYSTEM_TIME* system_time) BOOL rdp_read_client_time_zone(wStream* s, rdpSettings* settings) { - char* str = NULL; - TIME_ZONE_INFO* clientTimeZone; + LPTIME_ZONE_INFORMATION tz; + + if (!s || !settings) + return FALSE; if (Stream_GetRemainingLength(s) < 172) return FALSE; - clientTimeZone = settings->ClientTimeZone; + tz = settings->ClientTimeZone; + if (!tz) + return FALSE; - Stream_Read_UINT32(s, clientTimeZone->bias); /* Bias */ + Stream_Read_UINT32(s, tz->Bias); /* Bias */ /* standardName (64 bytes) */ - ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) Stream_Pointer(s), 64 / 2, &str, 0, NULL, NULL); - Stream_Seek(s, 64); - strncpy(clientTimeZone->standardName, str, sizeof(clientTimeZone->standardName)); - free(str); - str = NULL; + Stream_Read(s, tz->StandardName, sizeof(tz->StandardName)); - rdp_read_system_time(s, &clientTimeZone->standardDate); /* StandardDate */ - Stream_Read_UINT32(s, clientTimeZone->standardBias); /* StandardBias */ + rdp_read_system_time(s, &tz->StandardDate); /* StandardDate */ + Stream_Read_UINT32(s, tz->StandardBias); /* StandardBias */ /* daylightName (64 bytes) */ - ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) Stream_Pointer(s), 64 / 2, &str, 0, NULL, NULL); - Stream_Seek(s, 64); - strncpy(clientTimeZone->daylightName, str, sizeof(clientTimeZone->daylightName)); - free(str); + Stream_Read(s, tz->DaylightName, sizeof(tz->DaylightName)); - rdp_read_system_time(s, &clientTimeZone->daylightDate); /* DaylightDate */ - Stream_Read_UINT32(s, clientTimeZone->daylightBias); /* DaylightBias */ + rdp_read_system_time(s, &tz->DaylightDate); /* DaylightDate */ + Stream_Read_UINT32(s, tz->DaylightBias); /* DaylightBias */ return TRUE; } @@ -115,55 +116,45 @@ BOOL rdp_read_client_time_zone(wStream* s, rdpSettings* settings) * @param settings settings */ -void rdp_write_client_time_zone(wStream* s, rdpSettings* settings) +BOOL rdp_write_client_time_zone(wStream* s, rdpSettings* settings) { - WCHAR* standardName = NULL; - WCHAR* daylightName = NULL; - int standardNameLength; - int daylightNameLength; - TIME_ZONE_INFO* clientTimeZone; + LPTIME_ZONE_INFORMATION tz; + DWORD rc; - clientTimeZone = settings->ClientTimeZone; - freerdp_time_zone_detect(clientTimeZone); + tz = settings->ClientTimeZone; + if (!tz) + return FALSE; - standardNameLength = ConvertToUnicode(CP_UTF8, 0, clientTimeZone->standardName, -1, &standardName, 0) * 2; - daylightNameLength = ConvertToUnicode(CP_UTF8, 0, clientTimeZone->daylightName, -1, &daylightName, 0) * 2; + rc = GetTimeZoneInformation(tz); - if (standardNameLength > 62) - standardNameLength = 62; - - if (daylightNameLength > 62) - daylightNameLength = 62; - - /* Bias */ - Stream_Write_UINT32(s, clientTimeZone->bias); + /* Bias */ + Stream_Write_UINT32(s, tz->Bias); /* standardName (64 bytes) */ - Stream_Write(s, standardName, standardNameLength); - Stream_Zero(s, 64 - standardNameLength); + Stream_Write(s, tz->StandardName, sizeof(tz->StandardName)); - /* StandardDate */ - rdp_write_system_time(s, &clientTimeZone->standardDate); + /* StandardDate */ + rdp_write_system_time(s, &tz->StandardDate); - DEBUG_TIMEZONE("bias=%d stdName='%s' dlName='%s'", clientTimeZone->bias, clientTimeZone->standardName, clientTimeZone->daylightName); + DEBUG_TIMEZONE("bias=%d stdName='%s' dlName='%s'", tz->Bias, + tz->StandardName, tz->DaylightName); /* Note that StandardBias is ignored if no valid standardDate is provided. */ - /* StandardBias */ - Stream_Write_UINT32(s, clientTimeZone->standardBias); - DEBUG_TIMEZONE("StandardBias=%d", clientTimeZone->standardBias); + /* StandardBias */ + Stream_Write_UINT32(s, tz->StandardBias); + DEBUG_TIMEZONE("StandardBias=%d", tz->StandardBias); /* daylightName (64 bytes) */ - Stream_Write(s, daylightName, daylightNameLength); - Stream_Zero(s, 64 - daylightNameLength); + Stream_Write(s, tz->DaylightName, sizeof(tz->DaylightName)); - /* DaylightDate */ - rdp_write_system_time(s, &clientTimeZone->daylightDate); + /* DaylightDate */ + rdp_write_system_time(s, &tz->DaylightDate); /* Note that DaylightBias is ignored if no valid daylightDate is provided. */ - /* DaylightBias */ - Stream_Write_UINT32(s, clientTimeZone->daylightBias); - DEBUG_TIMEZONE("DaylightBias=%d", clientTimeZone->daylightBias); + /* DaylightBias */ + Stream_Write_UINT32(s, tz->DaylightBias); + DEBUG_TIMEZONE("DaylightBias=%d", tz->DaylightBias); - free(standardName); - free(daylightName); + return TRUE; } + diff --git a/libfreerdp/core/timezone.h b/libfreerdp/core/timezone.h index a45cd4437..92b2c7af1 100644 --- a/libfreerdp/core/timezone.h +++ b/libfreerdp/core/timezone.h @@ -28,15 +28,11 @@ #include #include -#include #include -void rdp_read_system_time(wStream* s, SYSTEM_TIME* system_time); -void rdp_write_system_time(wStream* s, SYSTEM_TIME* system_time); -void rdp_get_client_time_zone(wStream* s, rdpSettings* settings); BOOL rdp_read_client_time_zone(wStream* s, rdpSettings* settings); -void rdp_write_client_time_zone(wStream* s, rdpSettings* settings); +BOOL rdp_write_client_time_zone(wStream* s, rdpSettings* settings); #define TIMEZONE_TAG FREERDP_TAG("core.timezone") #ifdef WITH_DEBUG_TIMEZONE diff --git a/libfreerdp/locale/CMakeLists.txt b/libfreerdp/locale/CMakeLists.txt index f6bdf73f8..e418e0c9f 100644 --- a/libfreerdp/locale/CMakeLists.txt +++ b/libfreerdp/locale/CMakeLists.txt @@ -22,7 +22,6 @@ set(${MODULE_PREFIX}_SRCS keyboard_layout.c keyboard.c locale.c - timezone.c liblocale.h) set(${MODULE_PREFIX}_X11_SRCS diff --git a/libfreerdp/locale/timezone.c b/libfreerdp/locale/timezone.c deleted file mode 100644 index a37b9ea8f..000000000 --- a/libfreerdp/locale/timezone.c +++ /dev/null @@ -1,1772 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Time Zone Redirection - * - * Copyright 2012 Marc-Andre Moreau - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#define __USE_XOPEN -#include - -#ifndef _WIN32 -#include -#endif - -#include "liblocale.h" - -#include -#include - -#define TAG FREERDP_TAG("locale") - -/* Time Zone Redirection table generated with TimeZones.cs script */ - - -struct _SYSTEM_TIME_ENTRY -{ - UINT16 wYear; - UINT16 wMonth; - UINT16 wDayOfWeek; - UINT16 wDay; - UINT16 wHour; - UINT16 wMinute; - UINT16 wSecond; - UINT16 wMilliseconds; -}; -typedef struct _SYSTEM_TIME_ENTRY SYSTEM_TIME_ENTRY; - -struct _TIME_ZONE_RULE_ENTRY -{ - UINT64 TicksStart; - UINT64 TicksEnd; - INT32 DaylightDelta; - SYSTEM_TIME_ENTRY StandardDate; - SYSTEM_TIME_ENTRY DaylightDate; -}; -typedef struct _TIME_ZONE_RULE_ENTRY TIME_ZONE_RULE_ENTRY; - -struct _TIME_ZONE_ENTRY -{ - const char* Id; - UINT32 Bias; - BOOL SupportsDST; - const char* DisplayName; - const char* StandardName; - const char* DaylightName; - TIME_ZONE_RULE_ENTRY* RuleTable; - UINT32 RuleTableCount; -}; -typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_3[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_4[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_5[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_7[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_8[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_10[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_11[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_14[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_15[] = -{ - { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_17[] = -{ - { 633662964000000000ULL, 180000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 9, 6, 1, 23, 59 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_18[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_19[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 2, 0, 1, 2, 0 }, { 0, 11, 0, 1, 0, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 0, 1, 0, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_21[] = -{ - { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 5, 6, 1, 23, 59 }, { 0, 8, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_22[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 0, 1 }, { 0, 4, 0, 1, 0, 1 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 0, 1 }, }, - { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_23[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 2, 0, 1, 2, 0 }, { 0, 11, 0, 1, 0, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 0, 1, 0, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_24[] = -{ - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 1, 1, 1, 0, 0 }, { 0, 12, 0, 1, 0, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 1, 4, 1, 0, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_26[] = -{ - { 633662964000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, - { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_27[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 9, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_28[] = -{ - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_30[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_31[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_33[] = -{ - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 8, 0, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 5, 0, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 8, 6, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 7, 6, 1, 23, 59 }, { 0, 4, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_35[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 0, 1, 1, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_37[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_38[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_39[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_40[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_42[] = -{ - { 634293684000000000ULL, 180000000000ULL, -60, { 0, 9, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 634294548000000000ULL, 60, { 0, 4, 0, 1, 2, 0 }, { 0, 9, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_43[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 9, 5, 1, 1, 0 }, { 0, 3, 4, 1, 0, 0 }, }, - { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 10, 5, 1, 1, 0 }, { 0, 3, 4, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_44[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_45[] = -{ - { 633978324000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 0, 0 }, { 0, 3, 0, 1, 0, 0 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_46[] = -{ - { 632716020000000000ULL, 180000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 5, 1, 0, 0 }, }, - { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 5, 1, 0, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_47[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 9, 3, 1, 23, 59 }, { 0, 3, 5, 1, 23, 59 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 11, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 5, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, - { 3155378292000000000ULL, 636188436000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_49[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_50[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 1, 1, 3, 0 }, }, - { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_51[] = -{ - { 632716020000000000ULL, 632401524000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, - { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, - { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, - { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_52[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_53[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 4, 0, 1, 3, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 10, 1, 1, 4, 0 }, { 0, 4, 0, 1, 3, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_54[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_57[] = -{ - { 632716020000000000ULL, 180000000000ULL, 60, { 0, 9, 2, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 9, 6, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, - { 3155378292000000000ULL, 633663828000000000ULL, 60, { 0, 9, 1, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_59[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 5, 0 }, { 0, 3, 0, 1, 4, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_60[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_61[] = -{ - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 1, 2, 1, 0, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 1, 4, 1, 0, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_63[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_65[] = -{ - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 5, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 4, 2, 1, 23, 59 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_71[] = -{ - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 12, 4, 1, 23, 59 }, { 0, 6, 5, 1, 23, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_72[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_75[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_77[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_79[] = -{ - { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 1, 0, 1, 0, 0 }, { 0, 12, 0, 1, 2, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 1, 4, 1, 0, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_82[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_85[] = -{ - { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_88[] = -{ - { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_90[] = -{ - { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_91[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_93[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_94[] = -{ - { 633031380000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 9, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 9, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_96[] = -{ - { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 1, 4, 1, 0, 0 }, { 0, 11, 0, 1, 2, 0 }, }, - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 1, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, - { 3155378292000000000ULL, 634926132000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = -{ - { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = -{ - { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } -}; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_100[] = -{ - { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 9, 6, 1, 23, 59 }, }, - { 3155378292000000000ULL, 634294548000000000ULL, 60, { 0, 4, 0, 1, 1, 0 }, { 0, 9, 0, 1, 0, 0 }, } -}; - -static const TIME_ZONE_ENTRY TimeZoneTable[] = -{ - { - "Dateline Standard Time", 720, FALSE, "(UTC-12:00) International Date Line West", - "Dateline Standard Time", "Dateline Daylight Time", - NULL, 0 - }, - { - "UTC-11", 780, FALSE, "(UTC-11:00) Coordinated Universal Time-11", - "UTC-11", "UTC-11", - NULL, 0 - }, - { - "Hawaiian Standard Time", 840, FALSE, "(UTC-10:00) Hawaii", - "Hawaiian Standard Time", "Hawaiian Daylight Time", - NULL, 0 - }, - { - "Alaskan Standard Time", 900, TRUE, "(UTC-09:00) Alaska", - "Alaskan Standard Time", "Alaskan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_3, 2 - }, - { - "Pacific Standard Time (Mexico)", 960, TRUE, "(UTC-08:00) Baja California", - "Pacific Standard Time (Mexico)", "Pacific Daylight Time (Mexico)", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_4, 1 - }, - { - "Pacific Standard Time", 960, TRUE, "(UTC-08:00) Pacific Time (US & Canada)", - "Pacific Standard Time", "Pacific Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_5, 2 - }, - { - "US Mountain Standard Time", 1020, FALSE, "(UTC-07:00) Arizona", - "US Mountain Standard Time", "US Mountain Daylight Time", - NULL, 0 - }, - { - "Mountain Standard Time (Mexico)", 1020, TRUE, "(UTC-07:00) Chihuahua, La Paz, Mazatlan", - "Mountain Standard Time (Mexico)", "Mountain Daylight Time (Mexico)", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_7, 1 - }, - { - "Mountain Standard Time", 1020, TRUE, "(UTC-07:00) Mountain Time (US & Canada)", - "Mountain Standard Time", "Mountain Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_8, 2 - }, - { - "Central America Standard Time", 1080, FALSE, "(UTC-06:00) Central America", - "Central America Standard Time", "Central America Daylight Time", - NULL, 0 - }, - { - "Central Standard Time", 1080, TRUE, "(UTC-06:00) Central Time (US & Canada)", - "Central Standard Time", "Central Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_10, 2 - }, - { - "Central Standard Time (Mexico)", 1080, TRUE, "(UTC-06:00) Guadalajara, Mexico City, Monterrey", - "Central Standard Time (Mexico)", "Central Daylight Time (Mexico)", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_11, 1 - }, - { - "Canada Central Standard Time", 1080, FALSE, "(UTC-06:00) Saskatchewan", - "Canada Central Standard Time", "Canada Central Daylight Time", - NULL, 0 - }, - { - "SA Pacific Standard Time", 1140, FALSE, "(UTC-05:00) Bogota, Lima, Quito", - "SA Pacific Standard Time", "SA Pacific Daylight Time", - NULL, 0 - }, - { - "Eastern Standard Time", 1140, TRUE, "(UTC-05:00) Eastern Time (US & Canada)", - "Eastern Standard Time", "Eastern Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_14, 2 - }, - { - "US Eastern Standard Time", 1140, TRUE, "(UTC-05:00) Indiana (East)", - "US Eastern Standard Time", "US Eastern Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_15, 2 - }, - { - "Venezuela Standard Time", 1170, FALSE, "(UTC-04:30) Caracas", - "Venezuela Standard Time", "Venezuela Daylight Time", - NULL, 0 - }, - { - "Paraguay Standard Time", 1200, TRUE, "(UTC-04:00) Asuncion", - "Paraguay Standard Time", "Paraguay Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_17, 14 - }, - { - "Atlantic Standard Time", 1200, TRUE, "(UTC-04:00) Atlantic Time (Canada)", - "Atlantic Standard Time", "Atlantic Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_18, 2 - }, - { - "Central Brazilian Standard Time", 1200, TRUE, "(UTC-04:00) Cuiaba", - "Central Brazilian Standard Time", "Central Brazilian Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_19, 35 - }, - { - "SA Western Standard Time", 1200, FALSE, "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan", - "SA Western Standard Time", "SA Western Daylight Time", - NULL, 0 - }, - { - "Pacific SA Standard Time", 1200, TRUE, "(UTC-04:00) Santiago", - "Pacific SA Standard Time", "Pacific SA Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_21, 6 - }, - { - "Newfoundland Standard Time", 1230, TRUE, "(UTC-03:30) Newfoundland", - "Newfoundland Standard Time", "Newfoundland Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_22, 7 - }, - { - "E. South America Standard Time", 1260, TRUE, "(UTC-03:00) Brasilia", - "E. South America Standard Time", "E. South America Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_23, 35 - }, - { - "Argentina Standard Time", 1260, TRUE, "(UTC-03:00) Buenos Aires", - "Argentina Standard Time", "Argentina Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_24, 3 - }, - { - "SA Eastern Standard Time", 1260, FALSE, "(UTC-03:00) Cayenne, Fortaleza", - "SA Eastern Standard Time", "SA Eastern Daylight Time", - NULL, 0 - }, - { - "Greenland Standard Time", 1260, TRUE, "(UTC-03:00) Greenland", - "Greenland Standard Time", "Greenland Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_26, 14 - }, - { - "Montevideo Standard Time", 1260, TRUE, "(UTC-03:00) Montevideo", - "Montevideo Standard Time", "Montevideo Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_27, 2 - }, - { - "Bahia Standard Time", 1260, TRUE, "(UTC-03:00) Salvador", - "Bahia Standard Time", "Bahia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_28, 30 - }, - { - "UTC-02", 1320, FALSE, "(UTC-02:00) Coordinated Universal Time-02", - "UTC-02", "UTC-02", - NULL, 0 - }, - { - "Mid-Atlantic Standard Time", 1320, TRUE, "(UTC-02:00) Mid-Atlantic", - "Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_30, 1 - }, - { - "Azores Standard Time", 1380, TRUE, "(UTC-01:00) Azores", - "Azores Standard Time", "Azores Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_31, 1 - }, - { - "Cape Verde Standard Time", 1380, FALSE, "(UTC-01:00) Cape Verde Is.", - "Cape Verde Standard Time", "Cape Verde Daylight Time", - NULL, 0 - }, - { - "Morocco Standard Time", 0, TRUE, "(UTC) Casablanca", - "Morocco Standard Time", "Morocco Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_33, 4 - }, - { - "UTC", 0, FALSE, "(UTC) Coordinated Universal Time", - "Coordinated Universal Time", "Coordinated Universal Time", - NULL, 0 - }, - { - "GMT Standard Time", 0, TRUE, "(UTC) Dublin, Edinburgh, Lisbon, London", - "GMT Standard Time", "GMT Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_35, 1 - }, - { - "Greenwich Standard Time", 0, FALSE, "(UTC) Monrovia, Reykjavik", - "Greenwich Standard Time", "Greenwich Daylight Time", - NULL, 0 - }, - { - "W. Europe Standard Time", 60, TRUE, "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", - "W. Europe Standard Time", "W. Europe Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_37, 1 - }, - { - "Central Europe Standard Time", 60, TRUE, "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", - "Central Europe Standard Time", "Central Europe Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_38, 1 - }, - { - "Romance Standard Time", 60, TRUE, "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", - "Romance Standard Time", "Romance Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_39, 1 - }, - { - "Central European Standard Time", 60, TRUE, "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb", - "Central European Standard Time", "Central European Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_40, 1 - }, - { - "W. Central Africa Standard Time", 60, FALSE, "(UTC+01:00) West Central Africa", - "W. Central Africa Standard Time", "W. Central Africa Daylight Time", - NULL, 0 - }, - { - "Namibia Standard Time", 60, TRUE, "(UTC+01:00) Windhoek", - "Namibia Standard Time", "Namibia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_42, 2 - }, - { - "Jordan Standard Time", 120, TRUE, "(UTC+02:00) Amman", - "Jordan Standard Time", "Jordan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_43, 2 - }, - { - "GTB Standard Time", 120, TRUE, "(UTC+02:00) Athens, Bucharest, Istanbul", - "GTB Standard Time", "GTB Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_44, 1 - }, - { - "Middle East Standard Time", 120, TRUE, "(UTC+02:00) Beirut", - "Middle East Standard Time", "Middle East Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_45, 13 - }, - { - "Egypt Standard Time", 120, TRUE, "(UTC+02:00) Cairo", - "Egypt Standard Time", "Egypt Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_46, 6 - }, - { - "Syria Standard Time", 120, TRUE, "(UTC+02:00) Damascus", - "Syria Standard Time", "Syria Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_47, 12 - }, - { - "South Africa Standard Time", 120, FALSE, "(UTC+02:00) Harare, Pretoria", - "South Africa Standard Time", "South Africa Daylight Time", - NULL, 0 - }, - { - "FLE Standard Time", 120, TRUE, "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", - "FLE Standard Time", "FLE Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_49, 1 - }, - { - "Turkey Standard Time", 120, TRUE, "(UTC+02:00) Istanbul", - "Turkey Standard Time", "Turkey Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_50, 3 - }, - { - "Israel Standard Time", 120, TRUE, "(UTC+02:00) Jerusalem", - "Jerusalem Standard Time", "Jerusalem Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_51, 18 - }, - { - "E. Europe Standard Time", 120, TRUE, "(UTC+02:00) Nicosia", - "E. Europe Standard Time", "E. Europe Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_52, 1 - }, - { - "Arabic Standard Time", 180, TRUE, "(UTC+03:00) Baghdad", - "Arabic Standard Time", "Arabic Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_53, 2 - }, - { - "Kaliningrad Standard Time", 180, TRUE, "(UTC+03:00) Kaliningrad, Minsk", - "Kaliningrad Standard Time", "Kaliningrad Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_54, 1 - }, - { - "Arab Standard Time", 180, FALSE, "(UTC+03:00) Kuwait, Riyadh", - "Arab Standard Time", "Arab Daylight Time", - NULL, 0 - }, - { - "E. Africa Standard Time", 180, FALSE, "(UTC+03:00) Nairobi", - "E. Africa Standard Time", "E. Africa Daylight Time", - NULL, 0 - }, - { - "Iran Standard Time", 210, TRUE, "(UTC+03:30) Tehran", - "Iran Standard Time", "Iran Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_57, 3 - }, - { - "Arabian Standard Time", 240, FALSE, "(UTC+04:00) Abu Dhabi, Muscat", - "Arabian Standard Time", "Arabian Daylight Time", - NULL, 0 - }, - { - "Azerbaijan Standard Time", 240, TRUE, "(UTC+04:00) Baku", - "Azerbaijan Standard Time", "Azerbaijan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_59, 1 - }, - { - "Russian Standard Time", 240, TRUE, "(UTC+04:00) Moscow, St. Petersburg, Volgograd", - "Russian Standard Time", "Russian Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_60, 1 - }, - { - "Mauritius Standard Time", 240, TRUE, "(UTC+04:00) Port Louis", - "Mauritius Standard Time", "Mauritius Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_61, 2 - }, - { - "Georgian Standard Time", 240, FALSE, "(UTC+04:00) Tbilisi", - "Georgian Standard Time", "Georgian Daylight Time", - NULL, 0 - }, - { - "Caucasus Standard Time", 240, TRUE, "(UTC+04:00) Yerevan", - "Caucasus Standard Time", "Caucasus Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_63, 1 - }, - { - "Afghanistan Standard Time", 270, FALSE, "(UTC+04:30) Kabul", - "Afghanistan Standard Time", "Afghanistan Daylight Time", - NULL, 0 - }, - { - "Pakistan Standard Time", 300, TRUE, "(UTC+05:00) Islamabad, Karachi", - "Pakistan Standard Time", "Pakistan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_65, 2 - }, - { - "West Asia Standard Time", 300, FALSE, "(UTC+05:00) Tashkent", - "West Asia Standard Time", "West Asia Daylight Time", - NULL, 0 - }, - { - "India Standard Time", 330, FALSE, "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", - "India Standard Time", "India Daylight Time", - NULL, 0 - }, - { - "Sri Lanka Standard Time", 330, FALSE, "(UTC+05:30) Sri Jayawardenepura", - "Sri Lanka Standard Time", "Sri Lanka Daylight Time", - NULL, 0 - }, - { - "Nepal Standard Time", 345, FALSE, "(UTC+05:45) Kathmandu", - "Nepal Standard Time", "Nepal Daylight Time", - NULL, 0 - }, - { - "Central Asia Standard Time", 360, FALSE, "(UTC+06:00) Astana", - "Central Asia Standard Time", "Central Asia Daylight Time", - NULL, 0 - }, - { - "Bangladesh Standard Time", 360, TRUE, "(UTC+06:00) Dhaka", - "Bangladesh Standard Time", "Bangladesh Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_71, 1 - }, - { - "Ekaterinburg Standard Time", 360, TRUE, "(UTC+06:00) Ekaterinburg", - "Ekaterinburg Standard Time", "Ekaterinburg Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_72, 1 - }, - { - "Myanmar Standard Time", 390, FALSE, "(UTC+06:30) Yangon (Rangoon)", - "Myanmar Standard Time", "Myanmar Daylight Time", - NULL, 0 - }, - { - "SE Asia Standard Time", 420, FALSE, "(UTC+07:00) Bangkok, Hanoi, Jakarta", - "SE Asia Standard Time", "SE Asia Daylight Time", - NULL, 0 - }, - { - "N. Central Asia Standard Time", 420, TRUE, "(UTC+07:00) Novosibirsk", - "N. Central Asia Standard Time", "N. Central Asia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_75, 1 - }, - { - "China Standard Time", 480, FALSE, "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", - "China Standard Time", "China Daylight Time", - NULL, 0 - }, - { - "North Asia Standard Time", 480, TRUE, "(UTC+08:00) Krasnoyarsk", - "North Asia Standard Time", "North Asia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_77, 1 - }, - { - "Singapore Standard Time", 480, FALSE, "(UTC+08:00) Kuala Lumpur, Singapore", - "Malay Peninsula Standard Time", "Malay Peninsula Daylight Time", - NULL, 0 - }, - { - "W. Australia Standard Time", 480, TRUE, "(UTC+08:00) Perth", - "W. Australia Standard Time", "W. Australia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_79, 4 - }, - { - "Taipei Standard Time", 480, FALSE, "(UTC+08:00) Taipei", - "Taipei Standard Time", "Taipei Daylight Time", - NULL, 0 - }, - { - "Ulaanbaatar Standard Time", 480, FALSE, "(UTC+08:00) Ulaanbaatar", - "Ulaanbaatar Standard Time", "Ulaanbaatar Daylight Time", - NULL, 0 - }, - { - "North Asia East Standard Time", 540, TRUE, "(UTC+09:00) Irkutsk", - "North Asia East Standard Time", "North Asia East Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_82, 1 - }, - { - "Tokyo Standard Time", 540, FALSE, "(UTC+09:00) Osaka, Sapporo, Tokyo", - "Tokyo Standard Time", "Tokyo Daylight Time", - NULL, 0 - }, - { - "Korea Standard Time", 540, FALSE, "(UTC+09:00) Seoul", - "Korea Standard Time", "Korea Daylight Time", - NULL, 0 - }, - { - "Cen. Australia Standard Time", 570, TRUE, "(UTC+09:30) Adelaide", - "Cen. Australia Standard Time", "Cen. Australia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_85, 2 - }, - { - "AUS Central Standard Time", 570, FALSE, "(UTC+09:30) Darwin", - "AUS Central Standard Time", "AUS Central Daylight Time", - NULL, 0 - }, - { - "E. Australia Standard Time", 600, FALSE, "(UTC+10:00) Brisbane", - "E. Australia Standard Time", "E. Australia Daylight Time", - NULL, 0 - }, - { - "AUS Eastern Standard Time", 600, TRUE, "(UTC+10:00) Canberra, Melbourne, Sydney", - "AUS Eastern Standard Time", "AUS Eastern Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_88, 2 - }, - { - "West Pacific Standard Time", 600, FALSE, "(UTC+10:00) Guam, Port Moresby", - "West Pacific Standard Time", "West Pacific Daylight Time", - NULL, 0 - }, - { - "Tasmania Standard Time", 600, TRUE, "(UTC+10:00) Hobart", - "Tasmania Standard Time", "Tasmania Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_90, 2 - }, - { - "Yakutsk Standard Time", 600, TRUE, "(UTC+10:00) Yakutsk", - "Yakutsk Standard Time", "Yakutsk Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_91, 1 - }, - { - "Central Pacific Standard Time", 660, FALSE, "(UTC+11:00) Solomon Is., New Caledonia", - "Central Pacific Standard Time", "Central Pacific Daylight Time", - NULL, 0 - }, - { - "Vladivostok Standard Time", 660, TRUE, "(UTC+11:00) Vladivostok", - "Vladivostok Standard Time", "Vladivostok Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_93, 1 - }, - { - "New Zealand Standard Time", 720, TRUE, "(UTC+12:00) Auckland, Wellington", - "New Zealand Standard Time", "New Zealand Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_94, 3 - }, - { - "UTC+12", 720, FALSE, "(UTC+12:00) Coordinated Universal Time+12", - "UTC+12", "UTC+12", - NULL, 0 - }, - { - "Fiji Standard Time", 720, TRUE, "(UTC+12:00) Fiji", - "Fiji Standard Time", "Fiji Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_96, 5 - }, - { - "Magadan Standard Time", 720, TRUE, "(UTC+12:00) Magadan", - "Magadan Standard Time", "Magadan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_97, 1 - }, - { - "Kamchatka Standard Time", 720, TRUE, "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", - "Kamchatka Standard Time", "Kamchatka Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_98, 1 - }, - { - "Tonga Standard Time", 780, FALSE, "(UTC+13:00) Nuku'alofa", - "Tonga Standard Time", "Tonga Daylight Time", - NULL, 0 - }, - { - "Samoa Standard Time", 780, TRUE, "(UTC+13:00) Samoa", - "Samoa Standard Time", "Samoa Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_100, 2 - } -}; - -/* Table generated with WindowsZones.cs */ - -struct _WINDOWS_TZID_ENTRY -{ - const char* windows; - const char* tzid; -}; -typedef struct _WINDOWS_TZID_ENTRY WINDOWS_TZID_ENTRY; - -const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = -{ - { "Afghanistan Standard Time", "Asia/Kabul" }, - { "Alaskan Standard Time", "America/Anchorage America/Juneau " - "America/Nome America/Sitka America/Yakutat" }, - { "Alaskan Standard Time", "America/Anchorage" }, - { "Arab Standard Time", "Asia/Aden" }, - { "Arab Standard Time", "Asia/Bahrain" }, - { "Arab Standard Time", "Asia/Kuwait" }, - { "Arab Standard Time", "Asia/Qatar" }, - { "Arab Standard Time", "Asia/Riyadh" }, - { "Arabian Standard Time", "Asia/Dubai" }, - { "Arabian Standard Time", "Asia/Muscat" }, - { "Arabian Standard Time", "Etc/GMT-4" }, - { "Arabic Standard Time", "Asia/Baghdad" }, - { "Argentina Standard Time", "America/Buenos_Aires America/Argentina/La_Rioja " - "America/Argentina/Rio_Gallegos America/Argentina/Salta " - "America/Argentina/San_Juan America/Argentina/San_Luis " - "America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca " - "America/Cordoba America/Jujuy America/Mendoza" }, - { "Argentina Standard Time", "America/Buenos_Aires" }, - { "Atlantic Standard Time", "America/Halifax America/Glace_Bay " - "America/Goose_Bay America/Moncton" }, - { "Atlantic Standard Time", "America/Halifax" }, - { "Atlantic Standard Time", "America/Thule" }, - { "Atlantic Standard Time", "Atlantic/Bermuda" }, - { "AUS Central Standard Time", "Australia/Darwin" }, - { "AUS Eastern Standard Time", "Australia/Sydney Australia/Melbourne" }, - { "AUS Eastern Standard Time", "Australia/Sydney" }, - { "Azerbaijan Standard Time", "Asia/Baku" }, - { "Azores Standard Time", "America/Scoresbysund" }, - { "Azores Standard Time", "Atlantic/Azores" }, - { "Bahia Standard Time", "America/Bahia" }, - { "Bangladesh Standard Time", "Asia/Dhaka" }, - { "Bangladesh Standard Time", "Asia/Thimphu" }, - { "Canada Central Standard Time", "America/Regina America/Swift_Current" }, - { "Canada Central Standard Time", "America/Regina" }, - { "Cape Verde Standard Time", "Atlantic/Cape_Verde" }, - { "Cape Verde Standard Time", "Etc/GMT+1" }, - { "Caucasus Standard Time", "Asia/Yerevan" }, - { "Cen. Australia Standard Time", "Australia/Adelaide Australia/Broken_Hill" }, - { "Cen. Australia Standard Time", "Australia/Adelaide" }, - { "Central America Standard Time", "America/Belize" }, - { "Central America Standard Time", "America/Costa_Rica" }, - { "Central America Standard Time", "America/El_Salvador" }, - { "Central America Standard Time", "America/Guatemala" }, - { "Central America Standard Time", "America/Managua" }, - { "Central America Standard Time", "America/Tegucigalpa" }, - { "Central America Standard Time", "Etc/GMT+6" }, - { "Central America Standard Time", "Pacific/Galapagos" }, - { "Central Asia Standard Time", "Antarctica/Vostok" }, - { "Central Asia Standard Time", "Asia/Almaty Asia/Qyzylorda" }, - { "Central Asia Standard Time", "Asia/Almaty" }, - { "Central Asia Standard Time", "Asia/Bishkek" }, - { "Central Asia Standard Time", "Etc/GMT-6" }, - { "Central Asia Standard Time", "Indian/Chagos" }, - { "Central Brazilian Standard Time", "America/Cuiaba America/Campo_Grande" }, - { "Central Brazilian Standard Time", "America/Cuiaba" }, - { "Central Europe Standard Time", "Europe/Belgrade" }, - { "Central Europe Standard Time", "Europe/Bratislava" }, - { "Central Europe Standard Time", "Europe/Budapest" }, - { "Central Europe Standard Time", "Europe/Ljubljana" }, - { "Central Europe Standard Time", "Europe/Podgorica" }, - { "Central Europe Standard Time", "Europe/Prague" }, - { "Central Europe Standard Time", "Europe/Tirane" }, - { "Central European Standard Time", "Europe/Sarajevo" }, - { "Central European Standard Time", "Europe/Skopje" }, - { "Central European Standard Time", "Europe/Warsaw" }, - { "Central European Standard Time", "Europe/Zagreb" }, - { "Central Pacific Standard Time", "Antarctica/Macquarie" }, - { "Central Pacific Standard Time", "Etc/GMT-11" }, - { "Central Pacific Standard Time", "Pacific/Efate" }, - { "Central Pacific Standard Time", "Pacific/Guadalcanal" }, - { "Central Pacific Standard Time", "Pacific/Noumea" }, - { "Central Pacific Standard Time", "Pacific/Ponape Pacific/Kosrae" }, - { "Central Standard Time (Mexico)", "America/Mexico_City America/Bahia_Banderas " - "America/Cancun America/Merida America/Monterrey" }, - { "Central Standard Time (Mexico)", "America/Mexico_City" }, - { "Central Standard Time", "America/Chicago America/Indiana/Knox " - "America/Indiana/Tell_City America/Menominee " - "America/North_Dakota/Beulah America/North_Dakota/Center " - "America/North_Dakota/New_Salem" }, - { "Central Standard Time", "America/Chicago" }, - { "Central Standard Time", "America/Matamoros" }, - { "Central Standard Time", "America/Winnipeg America/Rainy_River " - "America/Rankin_Inlet America/Resolute" }, - { "Central Standard Time", "CST6CDT" }, - { "China Standard Time", "Asia/Hong_Kong" }, - { "China Standard Time", "Asia/Macau" }, - { "China Standard Time", "Asia/Shanghai Asia/Chongqing Asia/Harbin Asia/Kashgar Asia/Urumqi" }, - { "China Standard Time", "Asia/Shanghai" }, - { "Dateline Standard Time", "Etc/GMT+12" }, - { "E. Africa Standard Time", "Africa/Addis_Ababa" }, - { "E. Africa Standard Time", "Africa/Asmera" }, - { "E. Africa Standard Time", "Africa/Dar_es_Salaam" }, - { "E. Africa Standard Time", "Africa/Djibouti" }, - { "E. Africa Standard Time", "Africa/Juba" }, - { "E. Africa Standard Time", "Africa/Kampala" }, - { "E. Africa Standard Time", "Africa/Khartoum" }, - { "E. Africa Standard Time", "Africa/Mogadishu" }, - { "E. Africa Standard Time", "Africa/Nairobi" }, - { "E. Africa Standard Time", "Antarctica/Syowa" }, - { "E. Africa Standard Time", "Etc/GMT-3" }, - { "E. Africa Standard Time", "Indian/Antananarivo" }, - { "E. Africa Standard Time", "Indian/Comoro" }, - { "E. Africa Standard Time", "Indian/Mayotte" }, - { "E. Australia Standard Time", "Australia/Brisbane Australia/Lindeman" }, - { "E. Australia Standard Time", "Australia/Brisbane" }, - { "E. Europe Standard Time", "Asia/Nicosia" }, - { "E. South America Standard Time", "America/Sao_Paulo" }, - { "Eastern Standard Time", "America/Grand_Turk" }, - { "Eastern Standard Time", "America/Nassau" }, - { "Eastern Standard Time", "America/New_York America/Detroit " - "America/Indiana/Petersburg America/Indiana/Vincennes " - "America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, - { "Eastern Standard Time", "America/New_York" }, - { "Eastern Standard Time", "America/Toronto America/Iqaluit America/Montreal " - "America/Nipigon America/Pangnirtung America/Thunder_Bay" }, - { "Eastern Standard Time", "EST5EDT" }, - { "Egypt Standard Time", "Africa/Cairo" }, - { "Egypt Standard Time", "Asia/Gaza Asia/Hebron" }, - { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, - { "Fiji Standard Time", "Pacific/Fiji" }, - { "FLE Standard Time", "Europe/Helsinki" }, - { "FLE Standard Time", "Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye" }, - { "FLE Standard Time", "Europe/Kiev" }, - { "FLE Standard Time", "Europe/Mariehamn" }, - { "FLE Standard Time", "Europe/Riga" }, - { "FLE Standard Time", "Europe/Sofia" }, - { "FLE Standard Time", "Europe/Tallinn" }, - { "FLE Standard Time", "Europe/Vilnius" }, - { "Georgian Standard Time", "Asia/Tbilisi" }, - { "GMT Standard Time", "Atlantic/Canary" }, - { "GMT Standard Time", "Atlantic/Faeroe" }, - { "GMT Standard Time", "Europe/Dublin" }, - { "GMT Standard Time", "Europe/Guernsey" }, - { "GMT Standard Time", "Europe/Isle_of_Man" }, - { "GMT Standard Time", "Europe/Jersey" }, - { "GMT Standard Time", "Europe/Lisbon Atlantic/Madeira" }, - { "GMT Standard Time", "Europe/London" }, - { "Greenland Standard Time", "America/Godthab" }, - { "Greenwich Standard Time", "Africa/Abidjan" }, - { "Greenwich Standard Time", "Africa/Accra" }, - { "Greenwich Standard Time", "Africa/Bamako" }, - { "Greenwich Standard Time", "Africa/Banjul" }, - { "Greenwich Standard Time", "Africa/Bissau" }, - { "Greenwich Standard Time", "Africa/Conakry" }, - { "Greenwich Standard Time", "Africa/Dakar" }, - { "Greenwich Standard Time", "Africa/El_Aaiun" }, - { "Greenwich Standard Time", "Africa/Freetown" }, - { "Greenwich Standard Time", "Africa/Lome" }, - { "Greenwich Standard Time", "Africa/Monrovia" }, - { "Greenwich Standard Time", "Africa/Nouakchott" }, - { "Greenwich Standard Time", "Africa/Ouagadougou" }, - { "Greenwich Standard Time", "Africa/Sao_Tome" }, - { "Greenwich Standard Time", "Atlantic/Reykjavik" }, - { "Greenwich Standard Time", "Atlantic/St_Helena" }, - { "GTB Standard Time", "Europe/Athens" }, - { "GTB Standard Time", "Europe/Bucharest" }, - { "GTB Standard Time", "Europe/Chisinau" }, - { "GTB Standard Time", "Europe/Istanbul" }, - { "Hawaiian Standard Time", "Etc/GMT+10" }, - { "Hawaiian Standard Time", "Pacific/Fakaofo" }, - { "Hawaiian Standard Time", "Pacific/Honolulu" }, - { "Hawaiian Standard Time", "Pacific/Johnston" }, - { "Hawaiian Standard Time", "Pacific/Rarotonga" }, - { "Hawaiian Standard Time", "Pacific/Tahiti" }, - { "India Standard Time", "Asia/Calcutta Asia/Kolkata" }, - { "Iran Standard Time", "Asia/Tehran" }, - { "Israel Standard Time", "Asia/Jerusalem" }, - { "Jordan Standard Time", "Asia/Amman" }, - { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, - { "Kaliningrad Standard Time", "Europe/Minsk" }, - { "Korea Standard Time", "Asia/Pyongyang" }, - { "Korea Standard Time", "Asia/Seoul" }, - { "Magadan Standard Time", "Asia/Magadan Asia/Anadyr Asia/Kamchatka" }, - { "Magadan Standard Time", "Asia/Magadan" }, - { "Mauritius Standard Time", "Indian/Mahe" }, - { "Mauritius Standard Time", "Indian/Mauritius" }, - { "Mauritius Standard Time", "Indian/Reunion" }, - { "Middle East Standard Time", "Asia/Beirut" }, - { "Montevideo Standard Time", "America/Montevideo" }, - { "Morocco Standard Time", "Africa/Casablanca" }, - { "Mountain Standard Time (Mexico)", "America/Chihuahua America/Mazatlan" }, - { "Mountain Standard Time (Mexico)", "America/Chihuahua" }, - { "Mountain Standard Time", "America/Denver America/Boise America/Shiprock" }, - { "Mountain Standard Time", "America/Denver" }, - { "Mountain Standard Time", "America/Edmonton " - "America/Cambridge_Bay America/Inuvik America/Yellowknife" }, - { "Mountain Standard Time", "America/Ojinaga" }, - { "Mountain Standard Time", "MST7MDT" }, - { "Myanmar Standard Time", "Asia/Rangoon" }, - { "Myanmar Standard Time", "Indian/Cocos" }, - { "N. Central Asia Standard Time", "Asia/Novosibirsk Asia/Novokuznetsk Asia/Omsk" }, - { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, - { "Namibia Standard Time", "Africa/Windhoek" }, - { "Nepal Standard Time", "Asia/Katmandu Asia/Kathmandu" }, - { "New Zealand Standard Time", "Antarctica/South_Pole Antarctica/McMurdo" }, - { "New Zealand Standard Time", "Pacific/Auckland" }, - { "Newfoundland Standard Time", "America/St_Johns" }, - { "North Asia East Standard Time", "Asia/Irkutsk" }, - { "North Asia Standard Time", "Asia/Krasnoyarsk" }, - { "Pacific SA Standard Time", "America/Santiago" }, - { "Pacific SA Standard Time", "Antarctica/Palmer" }, - { "Pacific Standard Time (Mexico)", "America/Santa_Isabel" }, - { "Pacific Standard Time", "America/Los_Angeles" }, - { "Pacific Standard Time", "America/Tijuana America/Ensenada" }, - { "Pacific Standard Time", "America/Vancouver America/Dawson America/Whitehorse" }, - { "Pacific Standard Time", "PST8PDT" }, - { "Pakistan Standard Time", "Asia/Karachi" }, - { "Paraguay Standard Time", "America/Asuncion" }, - { "Romance Standard Time", "Europe/Brussels" }, - { "Romance Standard Time", "Europe/Copenhagen" }, - { "Romance Standard Time", "Europe/Madrid Africa/Ceuta" }, - { "Romance Standard Time", "Europe/Paris" }, - { "Russian Standard Time", "Europe/Moscow Europe/Samara Europe/Volgograd" }, - { "Russian Standard Time", "Europe/Moscow" }, - { "SA Eastern Standard Time", "America/Cayenne" }, - { "SA Eastern Standard Time", "America/Fortaleza America/Araguaina " - "America/Belem America/Maceio America/Recife America/Santarem" }, - { "SA Eastern Standard Time", "America/Paramaribo" }, - { "SA Eastern Standard Time", "Antarctica/Rothera" }, - { "SA Eastern Standard Time", "Etc/GMT+3" }, - { "SA Pacific Standard Time", "America/Bogota" }, - { "SA Pacific Standard Time", "America/Cayman" }, - { "SA Pacific Standard Time", "America/Coral_Harbour" }, - { "SA Pacific Standard Time", "America/Guayaquil" }, - { "SA Pacific Standard Time", "America/Jamaica" }, - { "SA Pacific Standard Time", "America/Lima" }, - { "SA Pacific Standard Time", "America/Panama" }, - { "SA Pacific Standard Time", "America/Port-au-Prince" }, - { "SA Pacific Standard Time", "Etc/GMT+5" }, - { "SA Western Standard Time", "America/Anguilla" }, - { "SA Western Standard Time", "America/Antigua" }, - { "SA Western Standard Time", "America/Aruba" }, - { "SA Western Standard Time", "America/Barbados" }, - { "SA Western Standard Time", "America/Blanc-Sablon" }, - { "SA Western Standard Time", "America/Curacao" }, - { "SA Western Standard Time", "America/Dominica" }, - { "SA Western Standard Time", "America/Grenada" }, - { "SA Western Standard Time", "America/Guadeloupe" }, - { "SA Western Standard Time", "America/Guyana" }, - { "SA Western Standard Time", "America/La_Paz" }, - { "SA Western Standard Time", "America/Manaus America/Boa_Vista " - "America/Eirunepe America/Porto_Velho America/Rio_Branco" }, - { "SA Western Standard Time", "America/Marigot" }, - { "SA Western Standard Time", "America/Martinique" }, - { "SA Western Standard Time", "America/Montserrat" }, - { "SA Western Standard Time", "America/Port_of_Spain" }, - { "SA Western Standard Time", "America/Puerto_Rico" }, - { "SA Western Standard Time", "America/Santo_Domingo" }, - { "SA Western Standard Time", "America/St_Barthelemy" }, - { "SA Western Standard Time", "America/St_Kitts" }, - { "SA Western Standard Time", "America/St_Lucia" }, - { "SA Western Standard Time", "America/St_Thomas" }, - { "SA Western Standard Time", "America/St_Vincent" }, - { "SA Western Standard Time", "America/Tortola" }, - { "SA Western Standard Time", "Etc/GMT+4" }, - { "Samoa Standard Time", "Pacific/Apia Pacific/Samoa" }, - { "SE Asia Standard Time", "Antarctica/Davis" }, - { "SE Asia Standard Time", "Asia/Bangkok" }, - { "SE Asia Standard Time", "Asia/Hovd" }, - { "SE Asia Standard Time", "Asia/Jakarta Asia/Pontianak" }, - { "SE Asia Standard Time", "Asia/Phnom_Penh" }, - { "SE Asia Standard Time", "Asia/Saigon Asia/Ho_Chi_Minh" }, - { "SE Asia Standard Time", "Asia/Vientiane" }, - { "SE Asia Standard Time", "Etc/GMT-7" }, - { "SE Asia Standard Time", "Indian/Christmas" }, - { "Singapore Standard Time", "Asia/Brunei" }, - { "Singapore Standard Time", "Asia/Kuala_Lumpur Asia/Kuching" }, - { "Singapore Standard Time", "Asia/Makassar" }, - { "Singapore Standard Time", "Asia/Manila" }, - { "Singapore Standard Time", "Asia/Singapore" }, - { "Singapore Standard Time", "Etc/GMT-8" }, - { "South Africa Standard Time", "Africa/Blantyre" }, - { "South Africa Standard Time", "Africa/Bujumbura" }, - { "South Africa Standard Time", "Africa/Gaborone" }, - { "South Africa Standard Time", "Africa/Harare" }, - { "South Africa Standard Time", "Africa/Johannesburg" }, - { "South Africa Standard Time", "Africa/Kigali" }, - { "South Africa Standard Time", "Africa/Lubumbashi" }, - { "South Africa Standard Time", "Africa/Lusaka" }, - { "South Africa Standard Time", "Africa/Maputo" }, - { "South Africa Standard Time", "Africa/Maseru" }, - { "South Africa Standard Time", "Africa/Mbabane" }, - { "South Africa Standard Time", "Africa/Tripoli" }, - { "South Africa Standard Time", "Etc/GMT-2" }, - { "Sri Lanka Standard Time", "Asia/Colombo" }, - { "Syria Standard Time", "Asia/Damascus" }, - { "Taipei Standard Time", "Asia/Taipei" }, - { "Tasmania Standard Time", "Australia/Hobart Australia/Currie" }, - { "Tasmania Standard Time", "Australia/Hobart" }, - { "Tokyo Standard Time", "Asia/Dili" }, - { "Tokyo Standard Time", "Asia/Jayapura" }, - { "Tokyo Standard Time", "Asia/Tokyo" }, - { "Tokyo Standard Time", "Etc/GMT-9" }, - { "Tokyo Standard Time", "Pacific/Palau" }, - { "Tonga Standard Time", "Etc/GMT-13" }, - { "Tonga Standard Time", "Pacific/Enderbury" }, - { "Tonga Standard Time", "Pacific/Tongatapu" }, - /* { "Turkey Standard Time", "Europe/Istanbul" }, */ - { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar Asia/Choibalsan" }, - { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, - { "US Eastern Standard Time", "America/Indianapolis " - "America/Indiana/Marengo America/Indiana/Vevay" }, - { "US Eastern Standard Time", "America/Indianapolis" }, - { "US Mountain Standard Time", "America/Dawson_Creek" }, - { "US Mountain Standard Time", "America/Hermosillo" }, - { "US Mountain Standard Time", "America/Phoenix" }, - { "US Mountain Standard Time", "Etc/GMT+7" }, - { "UTC", "America/Danmarkshavn" }, - { "UTC", "Etc/GMT" }, - { "UTC+12", "Etc/GMT-12" }, - { "UTC+12", "Pacific/Funafuti" }, - { "UTC+12", "Pacific/Majuro Pacific/Kwajalein" }, - { "UTC+12", "Pacific/Nauru" }, - { "UTC+12", "Pacific/Tarawa" }, - { "UTC+12", "Pacific/Wake" }, - { "UTC+12", "Pacific/Wallis" }, - { "UTC-02", "America/Noronha" }, - { "UTC-02", "Atlantic/South_Georgia" }, - { "UTC-02", "Etc/GMT+2" }, - { "UTC-11", "Etc/GMT+11" }, - { "UTC-11", "Pacific/Midway" }, - { "UTC-11", "Pacific/Niue" }, - { "UTC-11", "Pacific/Pago_Pago" }, - { "Venezuela Standard Time", "America/Caracas" }, - { "Vladivostok Standard Time", "Asia/Vladivostok Asia/Sakhalin" }, - { "Vladivostok Standard Time", "Asia/Vladivostok" }, - { "W. Australia Standard Time", "Antarctica/Casey" }, - { "W. Australia Standard Time", "Australia/Perth" }, - { "W. Central Africa Standard Time", "Africa/Algiers" }, - { "W. Central Africa Standard Time", "Africa/Bangui" }, - { "W. Central Africa Standard Time", "Africa/Brazzaville" }, - { "W. Central Africa Standard Time", "Africa/Douala" }, - { "W. Central Africa Standard Time", "Africa/Kinshasa" }, - { "W. Central Africa Standard Time", "Africa/Lagos" }, - { "W. Central Africa Standard Time", "Africa/Libreville" }, - { "W. Central Africa Standard Time", "Africa/Luanda" }, - { "W. Central Africa Standard Time", "Africa/Malabo" }, - { "W. Central Africa Standard Time", "Africa/Ndjamena" }, - { "W. Central Africa Standard Time", "Africa/Niamey" }, - { "W. Central Africa Standard Time", "Africa/Porto-Novo" }, - { "W. Central Africa Standard Time", "Africa/Tunis" }, - { "W. Central Africa Standard Time", "Etc/GMT-1" }, - { "W. Europe Standard Time", "Arctic/Longyearbyen" }, - { "W. Europe Standard Time", "Europe/Amsterdam" }, - { "W. Europe Standard Time", "Europe/Andorra" }, - { "W. Europe Standard Time", "Europe/Berlin" }, - { "W. Europe Standard Time", "Europe/Gibraltar" }, - { "W. Europe Standard Time", "Europe/Luxembourg" }, - { "W. Europe Standard Time", "Europe/Malta" }, - { "W. Europe Standard Time", "Europe/Monaco" }, - { "W. Europe Standard Time", "Europe/Oslo" }, - { "W. Europe Standard Time", "Europe/Rome" }, - { "W. Europe Standard Time", "Europe/San_Marino" }, - { "W. Europe Standard Time", "Europe/Stockholm" }, - { "W. Europe Standard Time", "Europe/Vaduz" }, - { "W. Europe Standard Time", "Europe/Vatican" }, - { "W. Europe Standard Time", "Europe/Vienna" }, - { "W. Europe Standard Time", "Europe/Zurich" }, - { "West Asia Standard Time", "Antarctica/Mawson" }, - { "West Asia Standard Time", "Asia/Ashgabat" }, - { "West Asia Standard Time", "Asia/Dushanbe" }, - { "West Asia Standard Time", "Asia/Oral Asia/Aqtau Asia/Aqtobe" }, - { "West Asia Standard Time", "Asia/Tashkent Asia/Samarkand" }, - { "West Asia Standard Time", "Asia/Tashkent" }, - { "West Asia Standard Time", "Etc/GMT-5" }, - { "West Asia Standard Time", "Indian/Kerguelen" }, - { "West Asia Standard Time", "Indian/Maldives" }, - { "West Pacific Standard Time", "Antarctica/DumontDUrville" }, - { "West Pacific Standard Time", "Etc/GMT-10" }, - { "West Pacific Standard Time", "Pacific/Guam" }, - { "West Pacific Standard Time", "Pacific/Port_Moresby" }, - { "West Pacific Standard Time", "Pacific/Saipan" }, - { "West Pacific Standard Time", "Pacific/Truk" }, - { "Yakutsk Standard Time", "Asia/Yakutsk" } -}; - -static UINT64 freerdp_windows_gmtime() -{ - time_t unix_time; - UINT64 windows_time; - - time(&unix_time); - windows_time = unix_time; - windows_time *= 10000000; - windows_time += 621355968000000000ULL; - - return windows_time; -} - -char* freerdp_get_unix_timezone_identifier() -{ -#ifndef _WIN32 - FILE* fp; - ssize_t len; - char* tz_env; - size_t length; - char* tzid = NULL; - char buf[1024]; - - tz_env = getenv("TZ"); - - if (tz_env != NULL) - { - tzid = _strdup(tz_env); - return tzid; - } - -#if defined(__FreeBSD__) || defined(__OpenBSD__) - fp = fopen("/var/db/zoneinfo", "r"); -#else - fp = fopen("/etc/timezone", "r"); -#endif - if (fp != NULL) - { - fseek(fp, 0, SEEK_END); - length = ftell(fp); - fseek(fp, 0, SEEK_SET); - - if (length < 2) - { - fclose(fp) ; - return NULL; - } - - tzid = (char*) malloc(length + 1); - if (!tzid) - { - fclose(fp); - return NULL; - } - - if (fread(tzid, length, 1, fp) != 1) - { - free(tzid); - fclose(fp); - return NULL; - } - tzid[length] = '\0'; - - if (tzid[length - 1] == '\n') - tzid[length - 1] = '\0'; - - fclose(fp); - - return tzid; - } - - /* - * On linux distros such as Redhat or Archlinux, a symlink at /etc/localtime - * will point to /usr/share/zoneinfo/region/place where region/place could be - * America/Montreal for example. - * Some distributions do have to symlink at /etc/TZ. - */ - - if ((len = readlink("/etc/localtime", buf, sizeof(buf) - 1)) != -1 || - (len = readlink("/etc/TZ", buf, sizeof(buf) - 1)) != -1) - { - int num = 0; - int pos = len; - - buf[len] = '\0'; - - /* find the position of the 2nd to last "/" */ - - while (num < 2) - { - if (pos == 0) - break; - - pos -= 1; - - if (buf[pos] == '/') - num++; - } - - tzid = (char*) malloc(len - pos + 1); - if (!tzid) - return NULL; - - strncpy(tzid, buf + pos + 1, len - pos); - - return tzid; - } - - WLog_ERR(TAG, "Unable to detect time zone"); - return tzid; -#else - return 0; -#endif -} - -BOOL freerdp_match_unix_timezone_identifier_with_list(const char* tzid, const char* list) -{ - char* p; - char* list_copy; - - list_copy = _strdup(list); - if (!list_copy) - return FALSE; - - p = strtok(list_copy, " "); - - while (p != NULL) - { - if (strcmp(p, tzid) == 0) - { - free(list_copy); - return TRUE; - } - - p = strtok(NULL, " "); - } - - free(list_copy); - - return FALSE; -} - -TIME_ZONE_ENTRY* freerdp_detect_windows_time_zone(UINT32 bias) -{ - int i, j; - char* tzid; - TIME_ZONE_ENTRY* timezone; - - tzid = freerdp_get_unix_timezone_identifier(); - - if (tzid == NULL) - return NULL; - - for (i = 0; i < ARRAYSIZE(TimeZoneTable); i++) - { - for (j = 0; j < ARRAYSIZE(WindowsTimeZoneIdTable); j++) - { - if (strcmp(TimeZoneTable[i].Id, WindowsTimeZoneIdTable[j].windows) != 0) - continue; - - if (freerdp_match_unix_timezone_identifier_with_list(tzid, WindowsTimeZoneIdTable[j].tzid)) - { - free(tzid); - - timezone = (TIME_ZONE_ENTRY*) malloc(sizeof(TIME_ZONE_ENTRY)); - if (!timezone) - return NULL; - memcpy((void*) timezone, (void*) &TimeZoneTable[i], sizeof(TIME_ZONE_ENTRY)); - timezone->Bias = bias; - return timezone; - } - } - } - - WLog_ERR(TAG, "Unable to find a match for unix timezone: %s", tzid); - free(tzid); - return NULL; -} - -TIME_ZONE_RULE_ENTRY* freerdp_get_current_time_zone_rule(TIME_ZONE_RULE_ENTRY* rules, UINT32 count) -{ - int i; - UINT64 windows_time; - - windows_time = freerdp_windows_gmtime(); - - for (i = 0; i < (int) count; i++) - { - if ((rules[i].TicksStart >= windows_time) && (windows_time >= rules[i].TicksEnd)) - { - /*WLog_ERR(TAG, "Got rule %d from table at %p with count %u", i, rules, count);*/ - return &rules[i]; - } - } - - WLog_ERR(TAG, "Unable to get current timezone rule"); - return NULL; -} - -void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone) -{ - time_t t; - TIME_ZONE_ENTRY* tz; - struct tm* local_time; - - clientTimeZone->standardBias = 0; - - time(&t); - local_time = localtime(&t); - -#ifdef HAVE_TM_GMTOFF - #if defined(__FreeBSD__) || defined(__OpenBSD__) - if (local_time->tm_gmtoff >= 0) - clientTimeZone->bias = (UINT32) (local_time->tm_gmtoff / 60); - else - clientTimeZone->bias = (UINT32) (1440 + (INT32) (local_time->tm_gmtoff / 60)); - #else - clientTimeZone->bias = timezone / 60; - #endif - DEBUG_TIMEZONE("tzname[std]: %s, tzname[dst]: %s, timezone: %ld, Daylight: %d", tzname[0], tzname[1], timezone, daylight); -#elif defined(sun) - if (local_time->tm_isdst > 0) - clientTimeZone->bias = (UINT32) (altzone / 3600); - else - clientTimeZone->bias = (UINT32) (timezone / 3600); -#else - clientTimeZone->bias = 0; -#endif - - tz = freerdp_detect_windows_time_zone(clientTimeZone->bias); - - if (tz!= NULL) - { - DEBUG_TIMEZONE("tz: Id='%s' Bias=%d DST=%d dn='%s' sn='%s' dln='%s'", - tz->Id, tz->Bias, tz->SupportsDST, tz->DisplayName, - tz->StandardName, tz->DaylightName); - - sprintf(clientTimeZone->standardName, "%s", tz->StandardName); - sprintf(clientTimeZone->daylightName, "%s", tz->DaylightName); - - if ((tz->SupportsDST) && (tz->RuleTableCount > 0)) - { - TIME_ZONE_RULE_ENTRY* rule; - rule = freerdp_get_current_time_zone_rule(tz->RuleTable, tz->RuleTableCount); - - if (rule != NULL) - { - clientTimeZone->daylightBias = -rule->DaylightDelta; - - clientTimeZone->standardDate.wYear = rule->StandardDate.wYear; - clientTimeZone->standardDate.wMonth = rule->StandardDate.wMonth; - clientTimeZone->standardDate.wDayOfWeek = rule->StandardDate.wDayOfWeek; - clientTimeZone->standardDate.wDay = rule->StandardDate.wDay; - clientTimeZone->standardDate.wHour = rule->StandardDate.wHour; - clientTimeZone->standardDate.wMinute = rule->StandardDate.wMinute; - clientTimeZone->standardDate.wSecond = rule->StandardDate.wSecond; - clientTimeZone->standardDate.wMilliseconds = rule->StandardDate.wMilliseconds; - - clientTimeZone->daylightDate.wYear = rule->DaylightDate.wYear; - clientTimeZone->daylightDate.wMonth = rule->DaylightDate.wMonth; - clientTimeZone->daylightDate.wDayOfWeek = rule->DaylightDate.wDayOfWeek; - clientTimeZone->daylightDate.wDay = rule->DaylightDate.wDay; - clientTimeZone->daylightDate.wHour = rule->DaylightDate.wHour; - clientTimeZone->daylightDate.wMinute = rule->DaylightDate.wMinute; - clientTimeZone->daylightDate.wSecond = rule->DaylightDate.wSecond; - clientTimeZone->daylightDate.wMilliseconds = rule->DaylightDate.wMilliseconds; - } - } - free(tz); - } - else - { - /* could not detect timezone, fallback to using GMT */ - DEBUG_TIMEZONE("tz not found, using GMT."); - sprintf(clientTimeZone->standardName, "%s", "GMT Standard Time"); - sprintf(clientTimeZone->daylightName, "%s", "GMT Daylight Time"); - } -} diff --git a/winpr/libwinpr/timezone/timezone.c b/winpr/libwinpr/timezone/timezone.c index d910eaa39..79cb6f36b 100644 --- a/winpr/libwinpr/timezone/timezone.c +++ b/winpr/libwinpr/timezone/timezone.c @@ -22,12 +22,1741 @@ #endif #include +#include +#include "../log.h" + +#define TAG WINPR_TAG("timezone") #ifndef _WIN32 +#include +#include + +struct _TIME_ZONE_RULE_ENTRY +{ + UINT64 TicksStart; + UINT64 TicksEnd; + INT32 DaylightDelta; + SYSTEMTIME StandardDate; + SYSTEMTIME DaylightDate; +}; +typedef struct _TIME_ZONE_RULE_ENTRY TIME_ZONE_RULE_ENTRY; + +struct _TIME_ZONE_ENTRY +{ + const char* Id; + UINT32 Bias; + BOOL SupportsDST; + const char* DisplayName; + const char* StandardName; + const char* DaylightName; + TIME_ZONE_RULE_ENTRY* RuleTable; + UINT32 RuleTableCount; +}; +typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_3[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_4[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_5[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_7[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_8[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_10[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_11[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_14[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_15[] = +{ + { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_17[] = +{ + { 633662964000000000ULL, 180000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 9, 6, 1, 23, 59 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_18[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_19[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 2, 0, 1, 2, 0 }, { 0, 11, 0, 1, 0, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 0, 1, 0, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_21[] = +{ + { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 4, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 5, 6, 1, 23, 59 }, { 0, 8, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_22[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 0, 1 }, { 0, 4, 0, 1, 0, 1 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 11, 0, 1, 0, 1 }, { 0, 3, 0, 1, 0, 1 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 0, 1 }, }, + { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 11, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_23[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 2, 0, 1, 2, 0 }, { 0, 11, 0, 1, 0, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 0, 1, 0, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 2, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_24[] = +{ + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 1, 1, 1, 0, 0 }, { 0, 12, 0, 1, 0, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 0, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 6, 1, 23, 59 }, { 0, 1, 4, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_26[] = +{ + { 633662964000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, }, + { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 10, 6, 1, 23, 0 }, { 0, 3, 6, 1, 22, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_27[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 9, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_28[] = +{ + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 10, 6, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638395956000000000ULL, 638081460000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 638712180000000000ULL, 638396820000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639027540000000000ULL, 638713044000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639342900000000000ULL, 639028404000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639658260000000000ULL, 639343764000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 639974484000000000ULL, 639659124000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640289844000000000ULL, 639975348000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640605204000000000ULL, 640290708000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 640920564000000000ULL, 640606068000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641236788000000000ULL, 640921428000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641552148000000000ULL, 641237652000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 641867508000000000ULL, 641553012000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642182868000000000ULL, 641868372000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642499092000000000ULL, 642183732000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 642814452000000000ULL, 642499956000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643129812000000000ULL, 642815316000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 643445172000000000ULL, 643130676000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 643446036000000000ULL, 60, { 0, 2, 6, 1, 23, 59 }, { 0, 10, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_30[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_31[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_33[] = +{ + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 8, 0, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 5, 0, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 8, 6, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 7, 6, 1, 23, 59 }, { 0, 4, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_35[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 0, 1, 1, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_37[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_38[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_39[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_40[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_42[] = +{ + { 634293684000000000ULL, 180000000000ULL, -60, { 0, 9, 0, 1, 2, 0 }, { 0, 4, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 634294548000000000ULL, 60, { 0, 4, 0, 1, 2, 0 }, { 0, 9, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_43[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 9, 5, 1, 1, 0 }, { 0, 3, 4, 1, 0, 0 }, }, + { 3155378292000000000ULL, 633032244000000000ULL, 60, { 0, 10, 5, 1, 1, 0 }, { 0, 3, 4, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_44[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_45[] = +{ + { 633978324000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 0, 0 }, { 0, 3, 0, 1, 0, 0 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 637450740000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_46[] = +{ + { 632716020000000000ULL, 180000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 5, 1, 0, 0 }, }, + { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 5, 1, 0, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 8, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 9, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_47[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 9, 3, 1, 23, 59 }, { 0, 3, 5, 1, 23, 59 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 11, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 5, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, + { 3155378292000000000ULL, 636188436000000000ULL, 60, { 0, 10, 4, 1, 23, 59 }, { 0, 4, 4, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_49[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_50[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 1, 1, 3, 0 }, }, + { 3155378292000000000ULL, 634609908000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 3, 0, 1, 3, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_51[] = +{ + { 632716020000000000ULL, 632401524000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, + { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 635871348000000000ULL, 635556852000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, }, + { 636502932000000000ULL, 636188436000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 636818292000000000ULL, 636503796000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 637133652000000000ULL, 636819156000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 637449876000000000ULL, 637134516000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 637765236000000000ULL, 637450740000000000ULL, 60, { 0, 9, 0, 1, 2, 0 }, { 0, 3, 5, 1, 2, 0 }, }, + { 638080596000000000ULL, 637766100000000000ULL, 60, { 0, 10, 0, 1, 2, 0 }, { 0, 4, 5, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_52[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_53[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 4, 0 }, { 0, 4, 0, 1, 3, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 10, 1, 1, 4, 0 }, { 0, 4, 0, 1, 3, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_54[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_57[] = +{ + { 632716020000000000ULL, 180000000000ULL, 60, { 0, 9, 2, 1, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 9, 6, 1, 23, 59 }, { 0, 3, 4, 1, 23, 59 }, }, + { 3155378292000000000ULL, 633663828000000000ULL, 60, { 0, 9, 1, 1, 23, 59 }, { 0, 3, 6, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_59[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 5, 0 }, { 0, 3, 0, 1, 4, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_60[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_61[] = +{ + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 1, 2, 1, 0, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 1, 2, 0 }, { 0, 1, 4, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_63[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_65[] = +{ + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 5, 1, 23, 59 }, { 0, 5, 6, 1, 23, 59 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 6, 1, 23, 59 }, { 0, 4, 2, 1, 23, 59 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_71[] = +{ + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 12, 4, 1, 23, 59 }, { 0, 6, 5, 1, 23, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_72[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_75[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_77[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_79[] = +{ + { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 1, 0, 1, 0, 0 }, { 0, 12, 0, 1, 2, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 1, 4, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_82[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_85[] = +{ + { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_88[] = +{ + { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_90[] = +{ + { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_91[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_93[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_94[] = +{ + { 633031380000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 9, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 9, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_96[] = +{ + { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 1, 4, 1, 0, 0 }, { 0, 11, 0, 1, 2, 0 }, }, + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 60, { 0, 1, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, + { 3155378292000000000ULL, 634926132000000000ULL, 60, { 0, 3, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = +{ + { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 1, 3, 0 }, { 0, 3, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_100[] = +{ + { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 9, 6, 1, 23, 59 }, }, + { 3155378292000000000ULL, 634294548000000000ULL, 60, { 0, 4, 0, 1, 1, 0 }, { 0, 9, 0, 1, 0, 0 }, } +}; + +static const TIME_ZONE_ENTRY TimeZoneTable[] = +{ + { + "Dateline Standard Time", 720, FALSE, "(UTC-12:00) International Date Line West", + "Dateline Standard Time", "Dateline Daylight Time", + NULL, 0 + }, + { + "UTC-11", 780, FALSE, "(UTC-11:00) Coordinated Universal Time-11", + "UTC-11", "UTC-11", + NULL, 0 + }, + { + "Hawaiian Standard Time", 840, FALSE, "(UTC-10:00) Hawaii", + "Hawaiian Standard Time", "Hawaiian Daylight Time", + NULL, 0 + }, + { + "Alaskan Standard Time", 900, TRUE, "(UTC-09:00) Alaska", + "Alaskan Standard Time", "Alaskan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_3, 2 + }, + { + "Pacific Standard Time (Mexico)", 960, TRUE, "(UTC-08:00) Baja California", + "Pacific Standard Time (Mexico)", "Pacific Daylight Time (Mexico)", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_4, 1 + }, + { + "Pacific Standard Time", 960, TRUE, "(UTC-08:00) Pacific Time (US & Canada)", + "Pacific Standard Time", "Pacific Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_5, 2 + }, + { + "US Mountain Standard Time", 1020, FALSE, "(UTC-07:00) Arizona", + "US Mountain Standard Time", "US Mountain Daylight Time", + NULL, 0 + }, + { + "Mountain Standard Time (Mexico)", 1020, TRUE, "(UTC-07:00) Chihuahua, La Paz, Mazatlan", + "Mountain Standard Time (Mexico)", "Mountain Daylight Time (Mexico)", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_7, 1 + }, + { + "Mountain Standard Time", 1020, TRUE, "(UTC-07:00) Mountain Time (US & Canada)", + "Mountain Standard Time", "Mountain Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_8, 2 + }, + { + "Central America Standard Time", 1080, FALSE, "(UTC-06:00) Central America", + "Central America Standard Time", "Central America Daylight Time", + NULL, 0 + }, + { + "Central Standard Time", 1080, TRUE, "(UTC-06:00) Central Time (US & Canada)", + "Central Standard Time", "Central Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_10, 2 + }, + { + "Central Standard Time (Mexico)", 1080, TRUE, "(UTC-06:00) Guadalajara, Mexico City, Monterrey", + "Central Standard Time (Mexico)", "Central Daylight Time (Mexico)", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_11, 1 + }, + { + "Canada Central Standard Time", 1080, FALSE, "(UTC-06:00) Saskatchewan", + "Canada Central Standard Time", "Canada Central Daylight Time", + NULL, 0 + }, + { + "SA Pacific Standard Time", 1140, FALSE, "(UTC-05:00) Bogota, Lima, Quito", + "SA Pacific Standard Time", "SA Pacific Daylight Time", + NULL, 0 + }, + { + "Eastern Standard Time", 1140, TRUE, "(UTC-05:00) Eastern Time (US & Canada)", + "Eastern Standard Time", "Eastern Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_14, 2 + }, + { + "US Eastern Standard Time", 1140, TRUE, "(UTC-05:00) Indiana (East)", + "US Eastern Standard Time", "US Eastern Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_15, 2 + }, + { + "Venezuela Standard Time", 1170, FALSE, "(UTC-04:30) Caracas", + "Venezuela Standard Time", "Venezuela Daylight Time", + NULL, 0 + }, + { + "Paraguay Standard Time", 1200, TRUE, "(UTC-04:00) Asuncion", + "Paraguay Standard Time", "Paraguay Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_17, 14 + }, + { + "Atlantic Standard Time", 1200, TRUE, "(UTC-04:00) Atlantic Time (Canada)", + "Atlantic Standard Time", "Atlantic Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_18, 2 + }, + { + "Central Brazilian Standard Time", 1200, TRUE, "(UTC-04:00) Cuiaba", + "Central Brazilian Standard Time", "Central Brazilian Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_19, 35 + }, + { + "SA Western Standard Time", 1200, FALSE, "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan", + "SA Western Standard Time", "SA Western Daylight Time", + NULL, 0 + }, + { + "Pacific SA Standard Time", 1200, TRUE, "(UTC-04:00) Santiago", + "Pacific SA Standard Time", "Pacific SA Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_21, 6 + }, + { + "Newfoundland Standard Time", 1230, TRUE, "(UTC-03:30) Newfoundland", + "Newfoundland Standard Time", "Newfoundland Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_22, 7 + }, + { + "E. South America Standard Time", 1260, TRUE, "(UTC-03:00) Brasilia", + "E. South America Standard Time", "E. South America Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_23, 35 + }, + { + "Argentina Standard Time", 1260, TRUE, "(UTC-03:00) Buenos Aires", + "Argentina Standard Time", "Argentina Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_24, 3 + }, + { + "SA Eastern Standard Time", 1260, FALSE, "(UTC-03:00) Cayenne, Fortaleza", + "SA Eastern Standard Time", "SA Eastern Daylight Time", + NULL, 0 + }, + { + "Greenland Standard Time", 1260, TRUE, "(UTC-03:00) Greenland", + "Greenland Standard Time", "Greenland Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_26, 14 + }, + { + "Montevideo Standard Time", 1260, TRUE, "(UTC-03:00) Montevideo", + "Montevideo Standard Time", "Montevideo Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_27, 2 + }, + { + "Bahia Standard Time", 1260, TRUE, "(UTC-03:00) Salvador", + "Bahia Standard Time", "Bahia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_28, 30 + }, + { + "UTC-02", 1320, FALSE, "(UTC-02:00) Coordinated Universal Time-02", + "UTC-02", "UTC-02", + NULL, 0 + }, + { + "Mid-Atlantic Standard Time", 1320, TRUE, "(UTC-02:00) Mid-Atlantic", + "Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_30, 1 + }, + { + "Azores Standard Time", 1380, TRUE, "(UTC-01:00) Azores", + "Azores Standard Time", "Azores Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_31, 1 + }, + { + "Cape Verde Standard Time", 1380, FALSE, "(UTC-01:00) Cape Verde Is.", + "Cape Verde Standard Time", "Cape Verde Daylight Time", + NULL, 0 + }, + { + "Morocco Standard Time", 0, TRUE, "(UTC) Casablanca", + "Morocco Standard Time", "Morocco Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_33, 4 + }, + { + "UTC", 0, FALSE, "(UTC) Coordinated Universal Time", + "Coordinated Universal Time", "Coordinated Universal Time", + NULL, 0 + }, + { + "GMT Standard Time", 0, TRUE, "(UTC) Dublin, Edinburgh, Lisbon, London", + "GMT Standard Time", "GMT Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_35, 1 + }, + { + "Greenwich Standard Time", 0, FALSE, "(UTC) Monrovia, Reykjavik", + "Greenwich Standard Time", "Greenwich Daylight Time", + NULL, 0 + }, + { + "W. Europe Standard Time", 60, TRUE, "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", + "W. Europe Standard Time", "W. Europe Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_37, 1 + }, + { + "Central Europe Standard Time", 60, TRUE, "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", + "Central Europe Standard Time", "Central Europe Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_38, 1 + }, + { + "Romance Standard Time", 60, TRUE, "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", + "Romance Standard Time", "Romance Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_39, 1 + }, + { + "Central European Standard Time", 60, TRUE, "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb", + "Central European Standard Time", "Central European Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_40, 1 + }, + { + "W. Central Africa Standard Time", 60, FALSE, "(UTC+01:00) West Central Africa", + "W. Central Africa Standard Time", "W. Central Africa Daylight Time", + NULL, 0 + }, + { + "Namibia Standard Time", 60, TRUE, "(UTC+01:00) Windhoek", + "Namibia Standard Time", "Namibia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_42, 2 + }, + { + "Jordan Standard Time", 120, TRUE, "(UTC+02:00) Amman", + "Jordan Standard Time", "Jordan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_43, 2 + }, + { + "GTB Standard Time", 120, TRUE, "(UTC+02:00) Athens, Bucharest, Istanbul", + "GTB Standard Time", "GTB Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_44, 1 + }, + { + "Middle East Standard Time", 120, TRUE, "(UTC+02:00) Beirut", + "Middle East Standard Time", "Middle East Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_45, 13 + }, + { + "Egypt Standard Time", 120, TRUE, "(UTC+02:00) Cairo", + "Egypt Standard Time", "Egypt Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_46, 6 + }, + { + "Syria Standard Time", 120, TRUE, "(UTC+02:00) Damascus", + "Syria Standard Time", "Syria Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_47, 12 + }, + { + "South Africa Standard Time", 120, FALSE, "(UTC+02:00) Harare, Pretoria", + "South Africa Standard Time", "South Africa Daylight Time", + NULL, 0 + }, + { + "FLE Standard Time", 120, TRUE, "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", + "FLE Standard Time", "FLE Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_49, 1 + }, + { + "Turkey Standard Time", 120, TRUE, "(UTC+02:00) Istanbul", + "Turkey Standard Time", "Turkey Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_50, 3 + }, + { + "Israel Standard Time", 120, TRUE, "(UTC+02:00) Jerusalem", + "Jerusalem Standard Time", "Jerusalem Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_51, 18 + }, + { + "E. Europe Standard Time", 120, TRUE, "(UTC+02:00) Nicosia", + "E. Europe Standard Time", "E. Europe Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_52, 1 + }, + { + "Arabic Standard Time", 180, TRUE, "(UTC+03:00) Baghdad", + "Arabic Standard Time", "Arabic Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_53, 2 + }, + { + "Kaliningrad Standard Time", 180, TRUE, "(UTC+03:00) Kaliningrad, Minsk", + "Kaliningrad Standard Time", "Kaliningrad Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_54, 1 + }, + { + "Arab Standard Time", 180, FALSE, "(UTC+03:00) Kuwait, Riyadh", + "Arab Standard Time", "Arab Daylight Time", + NULL, 0 + }, + { + "E. Africa Standard Time", 180, FALSE, "(UTC+03:00) Nairobi", + "E. Africa Standard Time", "E. Africa Daylight Time", + NULL, 0 + }, + { + "Iran Standard Time", 210, TRUE, "(UTC+03:30) Tehran", + "Iran Standard Time", "Iran Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_57, 3 + }, + { + "Arabian Standard Time", 240, FALSE, "(UTC+04:00) Abu Dhabi, Muscat", + "Arabian Standard Time", "Arabian Daylight Time", + NULL, 0 + }, + { + "Azerbaijan Standard Time", 240, TRUE, "(UTC+04:00) Baku", + "Azerbaijan Standard Time", "Azerbaijan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_59, 1 + }, + { + "Russian Standard Time", 240, TRUE, "(UTC+04:00) Moscow, St. Petersburg, Volgograd", + "Russian Standard Time", "Russian Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_60, 1 + }, + { + "Mauritius Standard Time", 240, TRUE, "(UTC+04:00) Port Louis", + "Mauritius Standard Time", "Mauritius Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_61, 2 + }, + { + "Georgian Standard Time", 240, FALSE, "(UTC+04:00) Tbilisi", + "Georgian Standard Time", "Georgian Daylight Time", + NULL, 0 + }, + { + "Caucasus Standard Time", 240, TRUE, "(UTC+04:00) Yerevan", + "Caucasus Standard Time", "Caucasus Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_63, 1 + }, + { + "Afghanistan Standard Time", 270, FALSE, "(UTC+04:30) Kabul", + "Afghanistan Standard Time", "Afghanistan Daylight Time", + NULL, 0 + }, + { + "Pakistan Standard Time", 300, TRUE, "(UTC+05:00) Islamabad, Karachi", + "Pakistan Standard Time", "Pakistan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_65, 2 + }, + { + "West Asia Standard Time", 300, FALSE, "(UTC+05:00) Tashkent", + "West Asia Standard Time", "West Asia Daylight Time", + NULL, 0 + }, + { + "India Standard Time", 330, FALSE, "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", + "India Standard Time", "India Daylight Time", + NULL, 0 + }, + { + "Sri Lanka Standard Time", 330, FALSE, "(UTC+05:30) Sri Jayawardenepura", + "Sri Lanka Standard Time", "Sri Lanka Daylight Time", + NULL, 0 + }, + { + "Nepal Standard Time", 345, FALSE, "(UTC+05:45) Kathmandu", + "Nepal Standard Time", "Nepal Daylight Time", + NULL, 0 + }, + { + "Central Asia Standard Time", 360, FALSE, "(UTC+06:00) Astana", + "Central Asia Standard Time", "Central Asia Daylight Time", + NULL, 0 + }, + { + "Bangladesh Standard Time", 360, TRUE, "(UTC+06:00) Dhaka", + "Bangladesh Standard Time", "Bangladesh Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_71, 1 + }, + { + "Ekaterinburg Standard Time", 360, TRUE, "(UTC+06:00) Ekaterinburg", + "Ekaterinburg Standard Time", "Ekaterinburg Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_72, 1 + }, + { + "Myanmar Standard Time", 390, FALSE, "(UTC+06:30) Yangon (Rangoon)", + "Myanmar Standard Time", "Myanmar Daylight Time", + NULL, 0 + }, + { + "SE Asia Standard Time", 420, FALSE, "(UTC+07:00) Bangkok, Hanoi, Jakarta", + "SE Asia Standard Time", "SE Asia Daylight Time", + NULL, 0 + }, + { + "N. Central Asia Standard Time", 420, TRUE, "(UTC+07:00) Novosibirsk", + "N. Central Asia Standard Time", "N. Central Asia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_75, 1 + }, + { + "China Standard Time", 480, FALSE, "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", + "China Standard Time", "China Daylight Time", + NULL, 0 + }, + { + "North Asia Standard Time", 480, TRUE, "(UTC+08:00) Krasnoyarsk", + "North Asia Standard Time", "North Asia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_77, 1 + }, + { + "Singapore Standard Time", 480, FALSE, "(UTC+08:00) Kuala Lumpur, Singapore", + "Malay Peninsula Standard Time", "Malay Peninsula Daylight Time", + NULL, 0 + }, + { + "W. Australia Standard Time", 480, TRUE, "(UTC+08:00) Perth", + "W. Australia Standard Time", "W. Australia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_79, 4 + }, + { + "Taipei Standard Time", 480, FALSE, "(UTC+08:00) Taipei", + "Taipei Standard Time", "Taipei Daylight Time", + NULL, 0 + }, + { + "Ulaanbaatar Standard Time", 480, FALSE, "(UTC+08:00) Ulaanbaatar", + "Ulaanbaatar Standard Time", "Ulaanbaatar Daylight Time", + NULL, 0 + }, + { + "North Asia East Standard Time", 540, TRUE, "(UTC+09:00) Irkutsk", + "North Asia East Standard Time", "North Asia East Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_82, 1 + }, + { + "Tokyo Standard Time", 540, FALSE, "(UTC+09:00) Osaka, Sapporo, Tokyo", + "Tokyo Standard Time", "Tokyo Daylight Time", + NULL, 0 + }, + { + "Korea Standard Time", 540, FALSE, "(UTC+09:00) Seoul", + "Korea Standard Time", "Korea Daylight Time", + NULL, 0 + }, + { + "Cen. Australia Standard Time", 570, TRUE, "(UTC+09:30) Adelaide", + "Cen. Australia Standard Time", "Cen. Australia Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_85, 2 + }, + { + "AUS Central Standard Time", 570, FALSE, "(UTC+09:30) Darwin", + "AUS Central Standard Time", "AUS Central Daylight Time", + NULL, 0 + }, + { + "E. Australia Standard Time", 600, FALSE, "(UTC+10:00) Brisbane", + "E. Australia Standard Time", "E. Australia Daylight Time", + NULL, 0 + }, + { + "AUS Eastern Standard Time", 600, TRUE, "(UTC+10:00) Canberra, Melbourne, Sydney", + "AUS Eastern Standard Time", "AUS Eastern Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_88, 2 + }, + { + "West Pacific Standard Time", 600, FALSE, "(UTC+10:00) Guam, Port Moresby", + "West Pacific Standard Time", "West Pacific Daylight Time", + NULL, 0 + }, + { + "Tasmania Standard Time", 600, TRUE, "(UTC+10:00) Hobart", + "Tasmania Standard Time", "Tasmania Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_90, 2 + }, + { + "Yakutsk Standard Time", 600, TRUE, "(UTC+10:00) Yakutsk", + "Yakutsk Standard Time", "Yakutsk Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_91, 1 + }, + { + "Central Pacific Standard Time", 660, FALSE, "(UTC+11:00) Solomon Is., New Caledonia", + "Central Pacific Standard Time", "Central Pacific Daylight Time", + NULL, 0 + }, + { + "Vladivostok Standard Time", 660, TRUE, "(UTC+11:00) Vladivostok", + "Vladivostok Standard Time", "Vladivostok Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_93, 1 + }, + { + "New Zealand Standard Time", 720, TRUE, "(UTC+12:00) Auckland, Wellington", + "New Zealand Standard Time", "New Zealand Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_94, 3 + }, + { + "UTC+12", 720, FALSE, "(UTC+12:00) Coordinated Universal Time+12", + "UTC+12", "UTC+12", + NULL, 0 + }, + { + "Fiji Standard Time", 720, TRUE, "(UTC+12:00) Fiji", + "Fiji Standard Time", "Fiji Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_96, 5 + }, + { + "Magadan Standard Time", 720, TRUE, "(UTC+12:00) Magadan", + "Magadan Standard Time", "Magadan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_97, 1 + }, + { + "Kamchatka Standard Time", 720, TRUE, "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", + "Kamchatka Standard Time", "Kamchatka Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_98, 1 + }, + { + "Tonga Standard Time", 780, FALSE, "(UTC+13:00) Nuku'alofa", + "Tonga Standard Time", "Tonga Daylight Time", + NULL, 0 + }, + { + "Samoa Standard Time", 780, TRUE, "(UTC+13:00) Samoa", + "Samoa Standard Time", "Samoa Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_100, 2 + } +}; + +/* Table generated with WindowsZones.cs */ + +struct _WINDOWS_TZID_ENTRY +{ + const char* windows; + const char* tzid; +}; +typedef struct _WINDOWS_TZID_ENTRY WINDOWS_TZID_ENTRY; + +const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = +{ + { "Afghanistan Standard Time", "Asia/Kabul" }, + { "Alaskan Standard Time", "America/Anchorage America/Juneau " + "America/Nome America/Sitka America/Yakutat" }, + { "Alaskan Standard Time", "America/Anchorage" }, + { "Arab Standard Time", "Asia/Aden" }, + { "Arab Standard Time", "Asia/Bahrain" }, + { "Arab Standard Time", "Asia/Kuwait" }, + { "Arab Standard Time", "Asia/Qatar" }, + { "Arab Standard Time", "Asia/Riyadh" }, + { "Arabian Standard Time", "Asia/Dubai" }, + { "Arabian Standard Time", "Asia/Muscat" }, + { "Arabian Standard Time", "Etc/GMT-4" }, + { "Arabic Standard Time", "Asia/Baghdad" }, + { "Argentina Standard Time", "America/Buenos_Aires America/Argentina/La_Rioja " + "America/Argentina/Rio_Gallegos America/Argentina/Salta " + "America/Argentina/San_Juan America/Argentina/San_Luis " + "America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca " + "America/Cordoba America/Jujuy America/Mendoza" }, + { "Argentina Standard Time", "America/Buenos_Aires" }, + { "Atlantic Standard Time", "America/Halifax America/Glace_Bay " + "America/Goose_Bay America/Moncton" }, + { "Atlantic Standard Time", "America/Halifax" }, + { "Atlantic Standard Time", "America/Thule" }, + { "Atlantic Standard Time", "Atlantic/Bermuda" }, + { "AUS Central Standard Time", "Australia/Darwin" }, + { "AUS Eastern Standard Time", "Australia/Sydney Australia/Melbourne" }, + { "AUS Eastern Standard Time", "Australia/Sydney" }, + { "Azerbaijan Standard Time", "Asia/Baku" }, + { "Azores Standard Time", "America/Scoresbysund" }, + { "Azores Standard Time", "Atlantic/Azores" }, + { "Bahia Standard Time", "America/Bahia" }, + { "Bangladesh Standard Time", "Asia/Dhaka" }, + { "Bangladesh Standard Time", "Asia/Thimphu" }, + { "Canada Central Standard Time", "America/Regina America/Swift_Current" }, + { "Canada Central Standard Time", "America/Regina" }, + { "Cape Verde Standard Time", "Atlantic/Cape_Verde" }, + { "Cape Verde Standard Time", "Etc/GMT+1" }, + { "Caucasus Standard Time", "Asia/Yerevan" }, + { "Cen. Australia Standard Time", "Australia/Adelaide Australia/Broken_Hill" }, + { "Cen. Australia Standard Time", "Australia/Adelaide" }, + { "Central America Standard Time", "America/Belize" }, + { "Central America Standard Time", "America/Costa_Rica" }, + { "Central America Standard Time", "America/El_Salvador" }, + { "Central America Standard Time", "America/Guatemala" }, + { "Central America Standard Time", "America/Managua" }, + { "Central America Standard Time", "America/Tegucigalpa" }, + { "Central America Standard Time", "Etc/GMT+6" }, + { "Central America Standard Time", "Pacific/Galapagos" }, + { "Central Asia Standard Time", "Antarctica/Vostok" }, + { "Central Asia Standard Time", "Asia/Almaty Asia/Qyzylorda" }, + { "Central Asia Standard Time", "Asia/Almaty" }, + { "Central Asia Standard Time", "Asia/Bishkek" }, + { "Central Asia Standard Time", "Etc/GMT-6" }, + { "Central Asia Standard Time", "Indian/Chagos" }, + { "Central Brazilian Standard Time", "America/Cuiaba America/Campo_Grande" }, + { "Central Brazilian Standard Time", "America/Cuiaba" }, + { "Central Europe Standard Time", "Europe/Belgrade" }, + { "Central Europe Standard Time", "Europe/Bratislava" }, + { "Central Europe Standard Time", "Europe/Budapest" }, + { "Central Europe Standard Time", "Europe/Ljubljana" }, + { "Central Europe Standard Time", "Europe/Podgorica" }, + { "Central Europe Standard Time", "Europe/Prague" }, + { "Central Europe Standard Time", "Europe/Tirane" }, + { "Central European Standard Time", "Europe/Sarajevo" }, + { "Central European Standard Time", "Europe/Skopje" }, + { "Central European Standard Time", "Europe/Warsaw" }, + { "Central European Standard Time", "Europe/Zagreb" }, + { "Central Pacific Standard Time", "Antarctica/Macquarie" }, + { "Central Pacific Standard Time", "Etc/GMT-11" }, + { "Central Pacific Standard Time", "Pacific/Efate" }, + { "Central Pacific Standard Time", "Pacific/Guadalcanal" }, + { "Central Pacific Standard Time", "Pacific/Noumea" }, + { "Central Pacific Standard Time", "Pacific/Ponape Pacific/Kosrae" }, + { "Central Standard Time (Mexico)", "America/Mexico_City America/Bahia_Banderas " + "America/Cancun America/Merida America/Monterrey" }, + { "Central Standard Time (Mexico)", "America/Mexico_City" }, + { "Central Standard Time", "America/Chicago America/Indiana/Knox " + "America/Indiana/Tell_City America/Menominee " + "America/North_Dakota/Beulah America/North_Dakota/Center " + "America/North_Dakota/New_Salem" }, + { "Central Standard Time", "America/Chicago" }, + { "Central Standard Time", "America/Matamoros" }, + { "Central Standard Time", "America/Winnipeg America/Rainy_River " + "America/Rankin_Inlet America/Resolute" }, + { "Central Standard Time", "CST6CDT" }, + { "China Standard Time", "Asia/Hong_Kong" }, + { "China Standard Time", "Asia/Macau" }, + { "China Standard Time", "Asia/Shanghai Asia/Chongqing Asia/Harbin Asia/Kashgar Asia/Urumqi" }, + { "China Standard Time", "Asia/Shanghai" }, + { "Dateline Standard Time", "Etc/GMT+12" }, + { "E. Africa Standard Time", "Africa/Addis_Ababa" }, + { "E. Africa Standard Time", "Africa/Asmera" }, + { "E. Africa Standard Time", "Africa/Dar_es_Salaam" }, + { "E. Africa Standard Time", "Africa/Djibouti" }, + { "E. Africa Standard Time", "Africa/Juba" }, + { "E. Africa Standard Time", "Africa/Kampala" }, + { "E. Africa Standard Time", "Africa/Khartoum" }, + { "E. Africa Standard Time", "Africa/Mogadishu" }, + { "E. Africa Standard Time", "Africa/Nairobi" }, + { "E. Africa Standard Time", "Antarctica/Syowa" }, + { "E. Africa Standard Time", "Etc/GMT-3" }, + { "E. Africa Standard Time", "Indian/Antananarivo" }, + { "E. Africa Standard Time", "Indian/Comoro" }, + { "E. Africa Standard Time", "Indian/Mayotte" }, + { "E. Australia Standard Time", "Australia/Brisbane Australia/Lindeman" }, + { "E. Australia Standard Time", "Australia/Brisbane" }, + { "E. Europe Standard Time", "Asia/Nicosia" }, + { "E. South America Standard Time", "America/Sao_Paulo" }, + { "Eastern Standard Time", "America/Grand_Turk" }, + { "Eastern Standard Time", "America/Nassau" }, + { "Eastern Standard Time", "America/New_York America/Detroit " + "America/Indiana/Petersburg America/Indiana/Vincennes " + "America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, + { "Eastern Standard Time", "America/New_York" }, + { "Eastern Standard Time", "America/Toronto America/Iqaluit America/Montreal " + "America/Nipigon America/Pangnirtung America/Thunder_Bay" }, + { "Eastern Standard Time", "EST5EDT" }, + { "Egypt Standard Time", "Africa/Cairo" }, + { "Egypt Standard Time", "Asia/Gaza Asia/Hebron" }, + { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, + { "Fiji Standard Time", "Pacific/Fiji" }, + { "FLE Standard Time", "Europe/Helsinki" }, + { "FLE Standard Time", "Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye" }, + { "FLE Standard Time", "Europe/Kiev" }, + { "FLE Standard Time", "Europe/Mariehamn" }, + { "FLE Standard Time", "Europe/Riga" }, + { "FLE Standard Time", "Europe/Sofia" }, + { "FLE Standard Time", "Europe/Tallinn" }, + { "FLE Standard Time", "Europe/Vilnius" }, + { "Georgian Standard Time", "Asia/Tbilisi" }, + { "GMT Standard Time", "Atlantic/Canary" }, + { "GMT Standard Time", "Atlantic/Faeroe" }, + { "GMT Standard Time", "Europe/Dublin" }, + { "GMT Standard Time", "Europe/Guernsey" }, + { "GMT Standard Time", "Europe/Isle_of_Man" }, + { "GMT Standard Time", "Europe/Jersey" }, + { "GMT Standard Time", "Europe/Lisbon Atlantic/Madeira" }, + { "GMT Standard Time", "Europe/London" }, + { "Greenland Standard Time", "America/Godthab" }, + { "Greenwich Standard Time", "Africa/Abidjan" }, + { "Greenwich Standard Time", "Africa/Accra" }, + { "Greenwich Standard Time", "Africa/Bamako" }, + { "Greenwich Standard Time", "Africa/Banjul" }, + { "Greenwich Standard Time", "Africa/Bissau" }, + { "Greenwich Standard Time", "Africa/Conakry" }, + { "Greenwich Standard Time", "Africa/Dakar" }, + { "Greenwich Standard Time", "Africa/El_Aaiun" }, + { "Greenwich Standard Time", "Africa/Freetown" }, + { "Greenwich Standard Time", "Africa/Lome" }, + { "Greenwich Standard Time", "Africa/Monrovia" }, + { "Greenwich Standard Time", "Africa/Nouakchott" }, + { "Greenwich Standard Time", "Africa/Ouagadougou" }, + { "Greenwich Standard Time", "Africa/Sao_Tome" }, + { "Greenwich Standard Time", "Atlantic/Reykjavik" }, + { "Greenwich Standard Time", "Atlantic/St_Helena" }, + { "GTB Standard Time", "Europe/Athens" }, + { "GTB Standard Time", "Europe/Bucharest" }, + { "GTB Standard Time", "Europe/Chisinau" }, + { "GTB Standard Time", "Europe/Istanbul" }, + { "Hawaiian Standard Time", "Etc/GMT+10" }, + { "Hawaiian Standard Time", "Pacific/Fakaofo" }, + { "Hawaiian Standard Time", "Pacific/Honolulu" }, + { "Hawaiian Standard Time", "Pacific/Johnston" }, + { "Hawaiian Standard Time", "Pacific/Rarotonga" }, + { "Hawaiian Standard Time", "Pacific/Tahiti" }, + { "India Standard Time", "Asia/Calcutta Asia/Kolkata" }, + { "Iran Standard Time", "Asia/Tehran" }, + { "Israel Standard Time", "Asia/Jerusalem" }, + { "Jordan Standard Time", "Asia/Amman" }, + { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, + { "Kaliningrad Standard Time", "Europe/Minsk" }, + { "Korea Standard Time", "Asia/Pyongyang" }, + { "Korea Standard Time", "Asia/Seoul" }, + { "Magadan Standard Time", "Asia/Magadan Asia/Anadyr Asia/Kamchatka" }, + { "Magadan Standard Time", "Asia/Magadan" }, + { "Mauritius Standard Time", "Indian/Mahe" }, + { "Mauritius Standard Time", "Indian/Mauritius" }, + { "Mauritius Standard Time", "Indian/Reunion" }, + { "Middle East Standard Time", "Asia/Beirut" }, + { "Montevideo Standard Time", "America/Montevideo" }, + { "Morocco Standard Time", "Africa/Casablanca" }, + { "Mountain Standard Time (Mexico)", "America/Chihuahua America/Mazatlan" }, + { "Mountain Standard Time (Mexico)", "America/Chihuahua" }, + { "Mountain Standard Time", "America/Denver America/Boise America/Shiprock" }, + { "Mountain Standard Time", "America/Denver" }, + { "Mountain Standard Time", "America/Edmonton " + "America/Cambridge_Bay America/Inuvik America/Yellowknife" }, + { "Mountain Standard Time", "America/Ojinaga" }, + { "Mountain Standard Time", "MST7MDT" }, + { "Myanmar Standard Time", "Asia/Rangoon" }, + { "Myanmar Standard Time", "Indian/Cocos" }, + { "N. Central Asia Standard Time", "Asia/Novosibirsk Asia/Novokuznetsk Asia/Omsk" }, + { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, + { "Namibia Standard Time", "Africa/Windhoek" }, + { "Nepal Standard Time", "Asia/Katmandu Asia/Kathmandu" }, + { "New Zealand Standard Time", "Antarctica/South_Pole Antarctica/McMurdo" }, + { "New Zealand Standard Time", "Pacific/Auckland" }, + { "Newfoundland Standard Time", "America/St_Johns" }, + { "North Asia East Standard Time", "Asia/Irkutsk" }, + { "North Asia Standard Time", "Asia/Krasnoyarsk" }, + { "Pacific SA Standard Time", "America/Santiago" }, + { "Pacific SA Standard Time", "Antarctica/Palmer" }, + { "Pacific Standard Time (Mexico)", "America/Santa_Isabel" }, + { "Pacific Standard Time", "America/Los_Angeles" }, + { "Pacific Standard Time", "America/Tijuana America/Ensenada" }, + { "Pacific Standard Time", "America/Vancouver America/Dawson America/Whitehorse" }, + { "Pacific Standard Time", "PST8PDT" }, + { "Pakistan Standard Time", "Asia/Karachi" }, + { "Paraguay Standard Time", "America/Asuncion" }, + { "Romance Standard Time", "Europe/Brussels" }, + { "Romance Standard Time", "Europe/Copenhagen" }, + { "Romance Standard Time", "Europe/Madrid Africa/Ceuta" }, + { "Romance Standard Time", "Europe/Paris" }, + { "Russian Standard Time", "Europe/Moscow Europe/Samara Europe/Volgograd" }, + { "Russian Standard Time", "Europe/Moscow" }, + { "SA Eastern Standard Time", "America/Cayenne" }, + { "SA Eastern Standard Time", "America/Fortaleza America/Araguaina " + "America/Belem America/Maceio America/Recife America/Santarem" }, + { "SA Eastern Standard Time", "America/Paramaribo" }, + { "SA Eastern Standard Time", "Antarctica/Rothera" }, + { "SA Eastern Standard Time", "Etc/GMT+3" }, + { "SA Pacific Standard Time", "America/Bogota" }, + { "SA Pacific Standard Time", "America/Cayman" }, + { "SA Pacific Standard Time", "America/Coral_Harbour" }, + { "SA Pacific Standard Time", "America/Guayaquil" }, + { "SA Pacific Standard Time", "America/Jamaica" }, + { "SA Pacific Standard Time", "America/Lima" }, + { "SA Pacific Standard Time", "America/Panama" }, + { "SA Pacific Standard Time", "America/Port-au-Prince" }, + { "SA Pacific Standard Time", "Etc/GMT+5" }, + { "SA Western Standard Time", "America/Anguilla" }, + { "SA Western Standard Time", "America/Antigua" }, + { "SA Western Standard Time", "America/Aruba" }, + { "SA Western Standard Time", "America/Barbados" }, + { "SA Western Standard Time", "America/Blanc-Sablon" }, + { "SA Western Standard Time", "America/Curacao" }, + { "SA Western Standard Time", "America/Dominica" }, + { "SA Western Standard Time", "America/Grenada" }, + { "SA Western Standard Time", "America/Guadeloupe" }, + { "SA Western Standard Time", "America/Guyana" }, + { "SA Western Standard Time", "America/La_Paz" }, + { "SA Western Standard Time", "America/Manaus America/Boa_Vista " + "America/Eirunepe America/Porto_Velho America/Rio_Branco" }, + { "SA Western Standard Time", "America/Marigot" }, + { "SA Western Standard Time", "America/Martinique" }, + { "SA Western Standard Time", "America/Montserrat" }, + { "SA Western Standard Time", "America/Port_of_Spain" }, + { "SA Western Standard Time", "America/Puerto_Rico" }, + { "SA Western Standard Time", "America/Santo_Domingo" }, + { "SA Western Standard Time", "America/St_Barthelemy" }, + { "SA Western Standard Time", "America/St_Kitts" }, + { "SA Western Standard Time", "America/St_Lucia" }, + { "SA Western Standard Time", "America/St_Thomas" }, + { "SA Western Standard Time", "America/St_Vincent" }, + { "SA Western Standard Time", "America/Tortola" }, + { "SA Western Standard Time", "Etc/GMT+4" }, + { "Samoa Standard Time", "Pacific/Apia Pacific/Samoa" }, + { "SE Asia Standard Time", "Antarctica/Davis" }, + { "SE Asia Standard Time", "Asia/Bangkok" }, + { "SE Asia Standard Time", "Asia/Hovd" }, + { "SE Asia Standard Time", "Asia/Jakarta Asia/Pontianak" }, + { "SE Asia Standard Time", "Asia/Phnom_Penh" }, + { "SE Asia Standard Time", "Asia/Saigon Asia/Ho_Chi_Minh" }, + { "SE Asia Standard Time", "Asia/Vientiane" }, + { "SE Asia Standard Time", "Etc/GMT-7" }, + { "SE Asia Standard Time", "Indian/Christmas" }, + { "Singapore Standard Time", "Asia/Brunei" }, + { "Singapore Standard Time", "Asia/Kuala_Lumpur Asia/Kuching" }, + { "Singapore Standard Time", "Asia/Makassar" }, + { "Singapore Standard Time", "Asia/Manila" }, + { "Singapore Standard Time", "Asia/Singapore" }, + { "Singapore Standard Time", "Etc/GMT-8" }, + { "South Africa Standard Time", "Africa/Blantyre" }, + { "South Africa Standard Time", "Africa/Bujumbura" }, + { "South Africa Standard Time", "Africa/Gaborone" }, + { "South Africa Standard Time", "Africa/Harare" }, + { "South Africa Standard Time", "Africa/Johannesburg" }, + { "South Africa Standard Time", "Africa/Kigali" }, + { "South Africa Standard Time", "Africa/Lubumbashi" }, + { "South Africa Standard Time", "Africa/Lusaka" }, + { "South Africa Standard Time", "Africa/Maputo" }, + { "South Africa Standard Time", "Africa/Maseru" }, + { "South Africa Standard Time", "Africa/Mbabane" }, + { "South Africa Standard Time", "Africa/Tripoli" }, + { "South Africa Standard Time", "Etc/GMT-2" }, + { "Sri Lanka Standard Time", "Asia/Colombo" }, + { "Syria Standard Time", "Asia/Damascus" }, + { "Taipei Standard Time", "Asia/Taipei" }, + { "Tasmania Standard Time", "Australia/Hobart Australia/Currie" }, + { "Tasmania Standard Time", "Australia/Hobart" }, + { "Tokyo Standard Time", "Asia/Dili" }, + { "Tokyo Standard Time", "Asia/Jayapura" }, + { "Tokyo Standard Time", "Asia/Tokyo" }, + { "Tokyo Standard Time", "Etc/GMT-9" }, + { "Tokyo Standard Time", "Pacific/Palau" }, + { "Tonga Standard Time", "Etc/GMT-13" }, + { "Tonga Standard Time", "Pacific/Enderbury" }, + { "Tonga Standard Time", "Pacific/Tongatapu" }, + /* { "Turkey Standard Time", "Europe/Istanbul" }, */ + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar Asia/Choibalsan" }, + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, + { "US Eastern Standard Time", "America/Indianapolis " + "America/Indiana/Marengo America/Indiana/Vevay" }, + { "US Eastern Standard Time", "America/Indianapolis" }, + { "US Mountain Standard Time", "America/Dawson_Creek" }, + { "US Mountain Standard Time", "America/Hermosillo" }, + { "US Mountain Standard Time", "America/Phoenix" }, + { "US Mountain Standard Time", "Etc/GMT+7" }, + { "UTC", "America/Danmarkshavn" }, + { "UTC", "Etc/GMT" }, + { "UTC+12", "Etc/GMT-12" }, + { "UTC+12", "Pacific/Funafuti" }, + { "UTC+12", "Pacific/Majuro Pacific/Kwajalein" }, + { "UTC+12", "Pacific/Nauru" }, + { "UTC+12", "Pacific/Tarawa" }, + { "UTC+12", "Pacific/Wake" }, + { "UTC+12", "Pacific/Wallis" }, + { "UTC-02", "America/Noronha" }, + { "UTC-02", "Atlantic/South_Georgia" }, + { "UTC-02", "Etc/GMT+2" }, + { "UTC-11", "Etc/GMT+11" }, + { "UTC-11", "Pacific/Midway" }, + { "UTC-11", "Pacific/Niue" }, + { "UTC-11", "Pacific/Pago_Pago" }, + { "Venezuela Standard Time", "America/Caracas" }, + { "Vladivostok Standard Time", "Asia/Vladivostok Asia/Sakhalin" }, + { "Vladivostok Standard Time", "Asia/Vladivostok" }, + { "W. Australia Standard Time", "Antarctica/Casey" }, + { "W. Australia Standard Time", "Australia/Perth" }, + { "W. Central Africa Standard Time", "Africa/Algiers" }, + { "W. Central Africa Standard Time", "Africa/Bangui" }, + { "W. Central Africa Standard Time", "Africa/Brazzaville" }, + { "W. Central Africa Standard Time", "Africa/Douala" }, + { "W. Central Africa Standard Time", "Africa/Kinshasa" }, + { "W. Central Africa Standard Time", "Africa/Lagos" }, + { "W. Central Africa Standard Time", "Africa/Libreville" }, + { "W. Central Africa Standard Time", "Africa/Luanda" }, + { "W. Central Africa Standard Time", "Africa/Malabo" }, + { "W. Central Africa Standard Time", "Africa/Ndjamena" }, + { "W. Central Africa Standard Time", "Africa/Niamey" }, + { "W. Central Africa Standard Time", "Africa/Porto-Novo" }, + { "W. Central Africa Standard Time", "Africa/Tunis" }, + { "W. Central Africa Standard Time", "Etc/GMT-1" }, + { "W. Europe Standard Time", "Arctic/Longyearbyen" }, + { "W. Europe Standard Time", "Europe/Amsterdam" }, + { "W. Europe Standard Time", "Europe/Andorra" }, + { "W. Europe Standard Time", "Europe/Berlin" }, + { "W. Europe Standard Time", "Europe/Gibraltar" }, + { "W. Europe Standard Time", "Europe/Luxembourg" }, + { "W. Europe Standard Time", "Europe/Malta" }, + { "W. Europe Standard Time", "Europe/Monaco" }, + { "W. Europe Standard Time", "Europe/Oslo" }, + { "W. Europe Standard Time", "Europe/Rome" }, + { "W. Europe Standard Time", "Europe/San_Marino" }, + { "W. Europe Standard Time", "Europe/Stockholm" }, + { "W. Europe Standard Time", "Europe/Vaduz" }, + { "W. Europe Standard Time", "Europe/Vatican" }, + { "W. Europe Standard Time", "Europe/Vienna" }, + { "W. Europe Standard Time", "Europe/Zurich" }, + { "West Asia Standard Time", "Antarctica/Mawson" }, + { "West Asia Standard Time", "Asia/Ashgabat" }, + { "West Asia Standard Time", "Asia/Dushanbe" }, + { "West Asia Standard Time", "Asia/Oral Asia/Aqtau Asia/Aqtobe" }, + { "West Asia Standard Time", "Asia/Tashkent Asia/Samarkand" }, + { "West Asia Standard Time", "Asia/Tashkent" }, + { "West Asia Standard Time", "Etc/GMT-5" }, + { "West Asia Standard Time", "Indian/Kerguelen" }, + { "West Asia Standard Time", "Indian/Maldives" }, + { "West Pacific Standard Time", "Antarctica/DumontDUrville" }, + { "West Pacific Standard Time", "Etc/GMT-10" }, + { "West Pacific Standard Time", "Pacific/Guam" }, + { "West Pacific Standard Time", "Pacific/Port_Moresby" }, + { "West Pacific Standard Time", "Pacific/Saipan" }, + { "West Pacific Standard Time", "Pacific/Truk" }, + { "Yakutsk Standard Time", "Asia/Yakutsk" } +}; + +static UINT64 winpr_windows_gmtime() +{ + time_t unix_time; + UINT64 windows_time; + + time(&unix_time); + windows_time = unix_time; + windows_time *= 10000000; + windows_time += 621355968000000000ULL; + + return windows_time; +} + +static char* winpr_read_unix_timezone_identifier_from_file(FILE* fp) +{ + long length; + char* tzid = NULL; + + if (fseek(fp, 0, SEEK_END) != 0) + return NULL; + length = ftell(fp); + if (fseek(fp, 0, SEEK_SET) != 0) + return NULL; + + if (length < 2) + return NULL; + + tzid = (char*) malloc(length + 1); + if (!tzid) + return NULL; + + if (fread(tzid, length, 1, fp) != 1) + { + free(tzid); + return NULL; + } + + tzid[length] = '\0'; + if (tzid[length - 1] == '\n') + tzid[length - 1] = '\0'; + + return tzid; +} + +static char* winpr_get_timezone_from_link(void) +{ + const char* links[] = + { + "/etc/localtime", + "/etc/TZ" + }; + size_t x; + ssize_t len; + char buf[1024]; + char* tzid = NULL; + + /* + * On linux distros such as Redhat or Archlinux, a symlink at /etc/localtime + * will point to /usr/share/zoneinfo/region/place where region/place could be + * America/Montreal for example. + * Some distributions do have to symlink at /etc/TZ. + */ + + for (x=0; xBias = bias; + return timezone; + } + } + } + + WLog_ERR(TAG, "Unable to find a match for unix timezone: %s", tzid); + free(tzid); + return NULL; +} + +static TIME_ZONE_RULE_ENTRY* winpr_get_current_time_zone_rule(TIME_ZONE_RULE_ENTRY* rules, UINT32 count) +{ + int i; + UINT64 windows_time; + + windows_time = winpr_windows_gmtime(); + + for (i = 0; i < (int) count; i++) + { + if ((rules[i].TicksStart >= windows_time) && (windows_time >= rules[i].TicksEnd)) + { + /*WLog_ERR(TAG, "Got rule %d from table at %p with count %u", i, rules, count);*/ + return &rules[i]; + } + } + + WLog_ERR(TAG, "Unable to get current timezone rule"); + return NULL; +} + DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation) { - return 0; + time_t t; + struct tm* local_time; + TIME_ZONE_ENTRY* dtz; + LPTIME_ZONE_INFORMATION tz = lpTimeZoneInformation; + + lpTimeZoneInformation->StandardBias = 0; + + time(&t); + local_time = localtime(&t); + + memset(tz, 0, sizeof(TIME_ZONE_INFORMATION)); + +#ifdef HAVE_TM_GMTOFF + #if defined(__FreeBSD__) || defined(__OpenBSD__) + if (local_time->tm_gmtoff >= 0) + tz->Bias = (UINT32) (local_time->tm_gmtoff / 60); + else + tz->Bias = (UINT32) (1440 + (INT32) (local_time->tm_gmtoff / 60)); + #else + tz->Bias = (UINT32) (local_time->tm_gmtoff / 60); + #endif +#else + tz->Bias = 0; +#endif + WLog_DBG(TAG, "tzname[std]: %s, tzname[dst]: %s, timezone: %ld, Daylight: %d", + tzname[0], tzname[1], timezone, daylight); + + dtz = winpr_detect_windows_time_zone(tz->Bias); + + if (dtz!= NULL) + { + WLog_DBG(TAG, "tz: Bias=%d sn='%s' dln='%s'", + dtz->Bias, dtz->StandardName, dtz->DaylightName); + + tz->Bias = dtz->Bias; + tz->StandardBias = dtz->Bias; + tz->DaylightBias = dtz->Bias; + + ConvertToUnicode(CP_UTF8, 0, dtz->StandardName, sizeof(dtz->StandardName), + (WCHAR**)&tz->StandardName, sizeof(tz->StandardName)/sizeof(WCHAR)); + ConvertToUnicode(CP_UTF8, 0, dtz->DaylightName, sizeof(dtz->DaylightName), + (WCHAR**)&tz->DaylightName, sizeof(tz->DaylightName)/sizeof(WCHAR)); + + if ((dtz->SupportsDST) && (dtz->RuleTableCount > 0)) + { + TIME_ZONE_RULE_ENTRY* rule; + rule = winpr_get_current_time_zone_rule(dtz->RuleTable, dtz->RuleTableCount); + + if (rule != NULL) + { + tz->DaylightBias = -rule->DaylightDelta; + + tz->StandardDate = rule->StandardDate; + tz->DaylightDate = rule->DaylightDate; + } + } + free(dtz); + + /* 1 ... TIME_ZONE_ID_STANDARD + * 2 ... TIME_ZONE_ID_DAYLIGHT */ + return local_time->tm_isdst ? 2 : 1; + } + else + { + /* could not detect timezone, fallback to using GMT */ + WLog_DBG(TAG, "tz not found, using GMT."); + memcpy(tz->StandardName, L"GMT Standard Time", sizeof(tz->StandardName)); + memcpy(tz->DaylightName, L"GMT Daylight Time", sizeof(tz->DaylightName)); + return 0; /* TIME_ZONE_ID_UNKNOWN */ + } } BOOL SetTimeZoneInformation(const TIME_ZONE_INFORMATION* lpTimeZoneInformation)