From 3aec03c1ed100acd0cc5a59e748f066be58e5e56 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Fri, 6 Dec 2019 09:56:59 +0100 Subject: [PATCH 1/3] New python script for zone generation Replace the old C# script with a python script to generate WindowsZones.c, update to new location of XML --- scripts/WindowsZones.csx | 91 --------------------------------- scripts/update-windows-zones.py | 41 +++++++++++++++ 2 files changed, 41 insertions(+), 91 deletions(-) delete mode 100644 scripts/WindowsZones.csx create mode 100755 scripts/update-windows-zones.py diff --git a/scripts/WindowsZones.csx b/scripts/WindowsZones.csx deleted file mode 100644 index 2fe59caa1..000000000 --- a/scripts/WindowsZones.csx +++ /dev/null @@ -1,91 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * TZID to Windows TimeZone Identifier Table Generator - * - * 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. - */ -/* Run with ' csi scripts/WindowsZones.csx' from freerdp checkout root */ - -#r "System.Xml" - -using System; -using System.IO; -using System.Xml; -using System.Text; -using System.Collections; -using System.Collections.Generic; - -/* - * this script uses windowsZones.xml which can be obtained at: - * http://www.unicode.org/repos/cldr/tags/latest/common/supplemental/windowsZones.xml - */ - -string tzid, windows; -const string file = @"winpr/libwinpr/timezone/WindowsZones.c"; -const string zonesUrl = @"http://www.unicode.org/repos/cldr/tags/latest/common/supplemental/windowsZones.xml"; -List list = new List(); -StreamWriter stream = new StreamWriter(file, false); -XmlTextReader reader = new XmlTextReader(zonesUrl); - -Console.WriteLine("Updating " + file); -stream.WriteLine("/* "); -stream.WriteLine(" * Automatically generated with scripts/WindowsZones.csx"); -stream.WriteLine(" */ "); -stream.WriteLine(); - -stream.WriteLine("struct _WINDOWS_TZID_ENTRY"); -stream.WriteLine("{"); -stream.WriteLine("\tconst char* windows;"); -stream.WriteLine("\tconst char* tzid;"); -stream.WriteLine("};"); -stream.WriteLine("typedef struct _WINDOWS_TZID_ENTRY WINDOWS_TZID_ENTRY;"); -stream.WriteLine(); - -while (reader.Read()) -{ - switch (reader.NodeType) - { - case XmlNodeType.Element: - - if (reader.Name.Equals("mapZone")) - { - tzid = reader.GetAttribute("type"); - windows = reader.GetAttribute("other"); - - string entry = String.Format("\"{0}\", \"{1}\"", windows, tzid); - - if (!list.Contains(entry)) - list.Add(entry); - } - - break; - } -} - -list.Sort(); - -stream.WriteLine("const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] ="); -stream.WriteLine("{"); - -foreach (string entry in list) -{ - stream.Write("\t{ "); - stream.Write(entry); - stream.WriteLine(" },"); -} - -stream.WriteLine("};"); - -stream.Close(); diff --git a/scripts/update-windows-zones.py b/scripts/update-windows-zones.py new file mode 100755 index 000000000..49b96e6d7 --- /dev/null +++ b/scripts/update-windows-zones.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +import os +import urllib.request +import xml.etree.ElementTree as ET + +name = os.path.realpath(__file__) +base = os.path.normpath(os.path.join(os.path.dirname(name), '..')) +rname = os.path.relpath(name, base) +zfile = os.path.join(base, 'winpr/libwinpr/timezone/WindowsZones.c') +url = 'https://raw.githubusercontent.com/unicode-org/cldr/latest/common/supplemental/windowsZones.xml' + +try: + with urllib.request.urlopen(url) as response: + xml = response.read() + root = ET.fromstring(xml) + entries = [] + for child in root.iter('mapZone'): + tzid = child.get('type') + windows = child.get('other') + entries += ['\t{ "' + windows + '", "' + tzid + '" },\n'] + entries.sort() + + with open(zfile, 'w') as f: + f.write('/*\n') + f.write(' * Automatically generated with ' + str(rname) + '\n') + f.write(' */\n') + f.write('\n') + f.write('#include "WindowsZones.h"\n') + f.write('\n') + f.write('const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] =\n') + f.write('{\n') + for entry in entries: + f.write(entry) + f.write('};\n') + f.write('\n'); + f.write('const size_t WindowsTimeZoneIdTableNrElements = ARRAYSIZE(WindowsTimeZoneIdTable);\n') +except Exception as e: + print('----------------------------------------------------') + print(str(e)) + print('----------------------------------------------------') From 1a52aff7f96eb55171d1741a92fb4c6bad606d76 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Fri, 6 Dec 2019 09:58:04 +0100 Subject: [PATCH 2/3] Update WindowsZones.c --- winpr/libwinpr/timezone/CMakeLists.txt | 2 +- winpr/libwinpr/timezone/TimeZones.c | 29 +---- winpr/libwinpr/timezone/TimeZones.h | 36 ++++++ winpr/libwinpr/timezone/WindowsZones.c | 160 ++++++++++++++++++++----- winpr/libwinpr/timezone/WindowsZones.h | 19 +++ winpr/libwinpr/timezone/timezone.c | 24 ++-- 6 files changed, 205 insertions(+), 65 deletions(-) create mode 100644 winpr/libwinpr/timezone/TimeZones.h create mode 100644 winpr/libwinpr/timezone/WindowsZones.h diff --git a/winpr/libwinpr/timezone/CMakeLists.txt b/winpr/libwinpr/timezone/CMakeLists.txt index 49ae25418..59623323f 100644 --- a/winpr/libwinpr/timezone/CMakeLists.txt +++ b/winpr/libwinpr/timezone/CMakeLists.txt @@ -15,4 +15,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -winpr_module_add(timezone.c) +winpr_module_add(timezone.c TimeZones.c WindowsZones.c TimeZones.h WindowsZones.h) diff --git a/winpr/libwinpr/timezone/TimeZones.c b/winpr/libwinpr/timezone/TimeZones.c index 934ec2557..d8b628029 100644 --- a/winpr/libwinpr/timezone/TimeZones.c +++ b/winpr/libwinpr/timezone/TimeZones.c @@ -2,30 +2,7 @@ * Automatically generated with scripts/TimeZones.csx */ -#pragma pack(push, 1) -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; - INT32 Bias; - BOOL SupportsDST; - const char* DisplayName; - const char* StandardName; - const char* DaylightName; - const TIME_ZONE_RULE_ENTRY* RuleTable; - UINT32 RuleTableCount; -}; -typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY; -#pragma pack(pop) +#include "TimeZones.h" static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_2[] = { { 633031164000000000ULL, @@ -3551,7 +3528,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_135[] = { { { 0, 9, 0, 5, 3, 0, 0, 0 }, } }; -static const TIME_ZONE_ENTRY TimeZoneTable[] = { +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", 660, FALSE, "(UTC-11:00) Coordinated Universal Time-11", "UTC-11", "UTC-11", NULL, @@ -3833,3 +3810,5 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { { "Line Islands Standard Time", -840, FALSE, "(UTC+14:00) Kiritimati Island", "Line Islands Standard Time", "Line Islands Daylight Time", NULL, 0 } }; + +const size_t TimeZoneTableNrElements = ARRAYSIZE(TimeZoneTable); diff --git a/winpr/libwinpr/timezone/TimeZones.h b/winpr/libwinpr/timezone/TimeZones.h new file mode 100644 index 000000000..a60854cea --- /dev/null +++ b/winpr/libwinpr/timezone/TimeZones.h @@ -0,0 +1,36 @@ +/* + * Automatically generated with scripts/TimeZones.csx + */ + +#ifndef WINPR_TIME_ZONES_H_ +#define WINPR_TIME_ZONES_H_ + +#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; + INT32 Bias; + BOOL SupportsDST; + const char* DisplayName; + const char* StandardName; + const char* DaylightName; + const TIME_ZONE_RULE_ENTRY* RuleTable; + UINT32 RuleTableCount; +}; +typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY; + +extern const TIME_ZONE_ENTRY TimeZoneTable[]; +extern const size_t TimeZoneTableNrElements; + +#endif /* WINPR_TIME_ZONES_H_ */ diff --git a/winpr/libwinpr/timezone/WindowsZones.c b/winpr/libwinpr/timezone/WindowsZones.c index 6b7843160..d97ec3ccb 100644 --- a/winpr/libwinpr/timezone/WindowsZones.c +++ b/winpr/libwinpr/timezone/WindowsZones.c @@ -1,30 +1,35 @@ /* - * Automatically generated with scripts/WindowsZones.csx + * Automatically generated with scripts/update-windows-zones.py */ -struct _WINDOWS_TZID_ENTRY -{ - const char* windows; - const char* tzid; -}; -typedef struct _WINDOWS_TZID_ENTRY WINDOWS_TZID_ENTRY; +#include "WindowsZones.h" const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { + { "AUS Central Standard Time", "Australia/Darwin" }, + { "AUS Central Standard Time", "Australia/Darwin" }, + { "AUS Eastern Standard Time", "Australia/Sydney Australia/Melbourne" }, + { "AUS Eastern Standard Time", "Australia/Sydney" }, + { "Afghanistan Standard Time", "Asia/Kabul" }, { "Afghanistan Standard Time", "Asia/Kabul" }, { "Alaskan Standard Time", "America/Anchorage America/Juneau America/Metlakatla America/Nome " "America/Sitka America/Yakutat" }, { "Alaskan Standard Time", "America/Anchorage" }, { "Aleutian Standard Time", "America/Adak" }, + { "Aleutian Standard Time", "America/Adak" }, + { "Altai Standard Time", "Asia/Barnaul" }, { "Altai Standard Time", "Asia/Barnaul" }, { "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" }, + { "Arab Standard Time", "Asia/Riyadh" }, + { "Arabian Standard Time", "Asia/Dubai" }, { "Arabian Standard Time", "Asia/Dubai" }, { "Arabian Standard Time", "Asia/Muscat" }, { "Arabian Standard Time", "Etc/GMT-4" }, { "Arabic Standard Time", "Asia/Baghdad" }, + { "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 " @@ -38,35 +43,42 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "Atlantic Standard Time", "America/Halifax" }, { "Atlantic Standard Time", "America/Thule" }, { "Atlantic Standard Time", "Atlantic/Bermuda" }, - { "AUS Central Standard Time", "Australia/Darwin" }, { "Aus Central W. Standard Time", "Australia/Eucla" }, - { "AUS Eastern Standard Time", "Australia/Sydney Australia/Melbourne" }, - { "AUS Eastern Standard Time", "Australia/Sydney" }, + { "Aus Central W. Standard Time", "Australia/Eucla" }, + { "Azerbaijan Standard Time", "Asia/Baku" }, { "Azerbaijan Standard Time", "Asia/Baku" }, { "Azores Standard Time", "America/Scoresbysund" }, { "Azores Standard Time", "Atlantic/Azores" }, + { "Azores Standard Time", "Atlantic/Azores" }, { "Bahia Standard Time", "America/Bahia" }, + { "Bahia Standard Time", "America/Bahia" }, + { "Bangladesh Standard Time", "Asia/Dhaka" }, { "Bangladesh Standard Time", "Asia/Dhaka" }, { "Bangladesh Standard Time", "Asia/Thimphu" }, { "Belarus Standard Time", "Europe/Minsk" }, + { "Belarus Standard Time", "Europe/Minsk" }, + { "Bougainville Standard Time", "Pacific/Bougainville" }, { "Bougainville Standard Time", "Pacific/Bougainville" }, { "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", "Atlantic/Cape_Verde" }, { "Cape Verde Standard Time", "Etc/GMT+1" }, { "Caucasus Standard Time", "Asia/Yerevan" }, + { "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/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 Asia/Qostanay" }, { "Central Asia Standard Time", "Asia/Almaty" }, { "Central Asia Standard Time", "Asia/Bishkek" }, { "Central Asia Standard Time", "Asia/Urumqi" }, @@ -77,6 +89,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "Central Europe Standard Time", "Europe/Belgrade" }, { "Central Europe Standard Time", "Europe/Bratislava" }, { "Central Europe Standard Time", "Europe/Budapest" }, + { "Central Europe Standard Time", "Europe/Budapest" }, { "Central Europe Standard Time", "Europe/Ljubljana" }, { "Central Europe Standard Time", "Europe/Podgorica" }, { "Central Europe Standard Time", "Europe/Prague" }, @@ -84,11 +97,13 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "Central European Standard Time", "Europe/Sarajevo" }, { "Central European Standard Time", "Europe/Skopje" }, { "Central European Standard Time", "Europe/Warsaw" }, + { "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/Guadalcanal" }, { "Central Pacific Standard Time", "Pacific/Noumea" }, { "Central Pacific Standard Time", "Pacific/Ponape Pacific/Kosrae" }, { "Central Standard Time (Mexico)", @@ -103,10 +118,14 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute" }, { "Central Standard Time", "CST6CDT" }, { "Chatham Islands Standard Time", "Pacific/Chatham" }, + { "Chatham Islands Standard Time", "Pacific/Chatham" }, { "China Standard Time", "Asia/Hong_Kong" }, { "China Standard Time", "Asia/Macau" }, { "China Standard Time", "Asia/Shanghai" }, + { "China Standard Time", "Asia/Shanghai" }, { "Cuba Standard Time", "America/Havana" }, + { "Cuba Standard Time", "America/Havana" }, + { "Dateline Standard Time", "Etc/GMT+12" }, { "Dateline Standard Time", "Etc/GMT+12" }, { "E. Africa Standard Time", "Africa/Addis_Ababa" }, { "E. Africa Standard Time", "Africa/Asmera" }, @@ -116,6 +135,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "E. Africa Standard Time", "Africa/Kampala" }, { "E. Africa Standard Time", "Africa/Mogadishu" }, { "E. Africa Standard Time", "Africa/Nairobi" }, + { "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" }, @@ -124,8 +144,12 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "E. Australia Standard Time", "Australia/Brisbane Australia/Lindeman" }, { "E. Australia Standard Time", "Australia/Brisbane" }, { "E. Europe Standard Time", "Europe/Chisinau" }, + { "E. Europe Standard Time", "Europe/Chisinau" }, + { "E. South America Standard Time", "America/Sao_Paulo" }, { "E. South America Standard Time", "America/Sao_Paulo" }, { "Easter Island Standard Time", "Pacific/Easter" }, + { "Easter Island Standard Time", "Pacific/Easter" }, + { "Eastern Standard Time (Mexico)", "America/Cancun" }, { "Eastern Standard Time (Mexico)", "America/Cancun" }, { "Eastern Standard Time", "America/Nassau" }, { "Eastern Standard Time", @@ -136,8 +160,9 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "America/Pangnirtung America/Thunder_Bay" }, { "Eastern Standard Time", "EST5EDT" }, { "Egypt Standard Time", "Africa/Cairo" }, + { "Egypt Standard Time", "Africa/Cairo" }, + { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, - { "Fiji Standard Time", "Pacific/Fiji" }, { "FLE Standard Time", "Europe/Helsinki" }, { "FLE Standard Time", "Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye" }, { "FLE Standard Time", "Europe/Kiev" }, @@ -146,7 +171,8 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "FLE Standard Time", "Europe/Sofia" }, { "FLE Standard Time", "Europe/Tallinn" }, { "FLE Standard Time", "Europe/Vilnius" }, - { "Georgian Standard Time", "Asia/Tbilisi" }, + { "Fiji Standard Time", "Pacific/Fiji" }, + { "Fiji Standard Time", "Pacific/Fiji" }, { "GMT Standard Time", "Atlantic/Canary" }, { "GMT Standard Time", "Atlantic/Faeroe" }, { "GMT Standard Time", "Europe/Dublin" }, @@ -155,6 +181,14 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "GMT Standard Time", "Europe/Jersey" }, { "GMT Standard Time", "Europe/Lisbon Atlantic/Madeira" }, { "GMT Standard Time", "Europe/London" }, + { "GMT Standard Time", "Europe/London" }, + { "GTB Standard Time", "Asia/Nicosia Asia/Famagusta" }, + { "GTB Standard Time", "Europe/Athens" }, + { "GTB Standard Time", "Europe/Bucharest" }, + { "GTB Standard Time", "Europe/Bucharest" }, + { "Georgian Standard Time", "Asia/Tbilisi" }, + { "Georgian Standard Time", "Asia/Tbilisi" }, + { "Greenland Standard Time", "America/Godthab" }, { "Greenland Standard Time", "America/Godthab" }, { "Greenwich Standard Time", "Africa/Abidjan" }, { "Greenwich Standard Time", "Africa/Accra" }, @@ -169,35 +203,50 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "Greenwich Standard Time", "Africa/Nouakchott" }, { "Greenwich Standard Time", "Africa/Ouagadougou" }, { "Greenwich Standard Time", "Atlantic/Reykjavik" }, + { "Greenwich Standard Time", "Atlantic/Reykjavik" }, { "Greenwich Standard Time", "Atlantic/St_Helena" }, - { "GTB Standard Time", "Asia/Famagusta Asia/Nicosia" }, - { "GTB Standard Time", "Europe/Athens" }, - { "GTB Standard Time", "Europe/Bucharest" }, + { "Haiti Standard Time", "America/Port-au-Prince" }, { "Haiti Standard Time", "America/Port-au-Prince" }, { "Hawaiian Standard Time", "Etc/GMT+10" }, { "Hawaiian Standard Time", "Pacific/Honolulu" }, + { "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" }, + { "India Standard Time", "Asia/Calcutta" }, + { "Iran Standard Time", "Asia/Tehran" }, { "Iran Standard Time", "Asia/Tehran" }, { "Israel Standard Time", "Asia/Jerusalem" }, + { "Israel Standard Time", "Asia/Jerusalem" }, + { "Jordan Standard Time", "Asia/Amman" }, { "Jordan Standard Time", "Asia/Amman" }, { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, + { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, { "Korea Standard Time", "Asia/Seoul" }, + { "Korea Standard Time", "Asia/Seoul" }, + { "Libya Standard Time", "Africa/Tripoli" }, { "Libya Standard Time", "Africa/Tripoli" }, { "Line Islands Standard Time", "Etc/GMT-14" }, { "Line Islands Standard Time", "Pacific/Kiritimati" }, + { "Line Islands Standard Time", "Pacific/Kiritimati" }, + { "Lord Howe Standard Time", "Australia/Lord_Howe" }, { "Lord Howe Standard Time", "Australia/Lord_Howe" }, { "Magadan Standard Time", "Asia/Magadan" }, + { "Magadan Standard Time", "Asia/Magadan" }, { "Magallanes Standard Time", "America/Punta_Arenas" }, - { "Magallanes Standard Time", "Antarctica/Palmer" }, + { "Magallanes Standard Time", "America/Punta_Arenas" }, + { "Marquesas Standard Time", "Pacific/Marquesas" }, { "Marquesas Standard Time", "Pacific/Marquesas" }, { "Mauritius Standard Time", "Indian/Mahe" }, { "Mauritius Standard Time", "Indian/Mauritius" }, + { "Mauritius Standard Time", "Indian/Mauritius" }, { "Mauritius Standard Time", "Indian/Reunion" }, { "Middle East Standard Time", "Asia/Beirut" }, + { "Middle East Standard Time", "Asia/Beirut" }, { "Montevideo Standard Time", "America/Montevideo" }, + { "Montevideo Standard Time", "America/Montevideo" }, + { "Morocco Standard Time", "Africa/Casablanca" }, { "Morocco Standard Time", "Africa/Casablanca" }, { "Morocco Standard Time", "Africa/El_Aaiun" }, { "Mountain Standard Time (Mexico)", "America/Chihuahua America/Mazatlan" }, @@ -209,46 +258,67 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "Mountain Standard Time", "America/Ojinaga" }, { "Mountain Standard Time", "MST7MDT" }, { "Myanmar Standard Time", "Asia/Rangoon" }, + { "Myanmar Standard Time", "Asia/Rangoon" }, { "Myanmar Standard Time", "Indian/Cocos" }, { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, + { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, { "Namibia Standard Time", "Africa/Windhoek" }, + { "Namibia Standard Time", "Africa/Windhoek" }, + { "Nepal Standard Time", "Asia/Katmandu" }, { "Nepal Standard Time", "Asia/Katmandu" }, { "New Zealand Standard Time", "Antarctica/McMurdo" }, { "New Zealand Standard Time", "Pacific/Auckland" }, + { "New Zealand Standard Time", "Pacific/Auckland" }, + { "Newfoundland Standard Time", "America/St_Johns" }, { "Newfoundland Standard Time", "America/St_Johns" }, { "Norfolk Standard Time", "Pacific/Norfolk" }, + { "Norfolk Standard Time", "Pacific/Norfolk" }, + { "North Asia East Standard Time", "Asia/Irkutsk" }, { "North Asia East Standard Time", "Asia/Irkutsk" }, { "North Asia Standard Time", "Asia/Krasnoyarsk Asia/Novokuznetsk" }, { "North Asia Standard Time", "Asia/Krasnoyarsk" }, { "North Korea Standard Time", "Asia/Pyongyang" }, + { "North Korea Standard Time", "Asia/Pyongyang" }, { "Omsk Standard Time", "Asia/Omsk" }, + { "Omsk Standard Time", "Asia/Omsk" }, + { "Pacific SA Standard Time", "America/Santiago" }, { "Pacific SA Standard Time", "America/Santiago" }, { "Pacific Standard Time (Mexico)", "America/Tijuana America/Santa_Isabel" }, { "Pacific Standard Time (Mexico)", "America/Tijuana" }, { "Pacific Standard Time", "America/Los_Angeles" }, + { "Pacific Standard Time", "America/Los_Angeles" }, { "Pacific Standard Time", "America/Vancouver America/Dawson America/Whitehorse" }, { "Pacific Standard Time", "PST8PDT" }, { "Pakistan Standard Time", "Asia/Karachi" }, + { "Pakistan Standard Time", "Asia/Karachi" }, { "Paraguay Standard Time", "America/Asuncion" }, + { "Paraguay Standard Time", "America/Asuncion" }, + { "Qyzylorda Standard Time", "Asia/Qyzylorda" }, + { "Qyzylorda Standard Time", "Asia/Qyzylorda" }, { "Romance Standard Time", "Europe/Brussels" }, { "Romance Standard Time", "Europe/Copenhagen" }, { "Romance Standard Time", "Europe/Madrid Africa/Ceuta" }, { "Romance Standard Time", "Europe/Paris" }, + { "Romance Standard Time", "Europe/Paris" }, + { "Russia Time Zone 10", "Asia/Srednekolymsk" }, { "Russia Time Zone 10", "Asia/Srednekolymsk" }, { "Russia Time Zone 11", "Asia/Kamchatka Asia/Anadyr" }, { "Russia Time Zone 11", "Asia/Kamchatka" }, { "Russia Time Zone 3", "Europe/Samara" }, - { "Russian Standard Time", "Europe/Moscow Europe/Kirov Europe/Volgograd" }, + { "Russia Time Zone 3", "Europe/Samara" }, + { "Russian Standard Time", "Europe/Moscow Europe/Kirov" }, { "Russian Standard Time", "Europe/Moscow" }, { "Russian Standard Time", "Europe/Simferopol" }, { "SA Eastern Standard Time", "America/Cayenne" }, + { "SA Eastern Standard Time", "America/Cayenne" }, { "SA Eastern Standard Time", "America/Fortaleza America/Belem America/Maceio America/Recife America/Santarem" }, { "SA Eastern Standard Time", "America/Paramaribo" }, - { "SA Eastern Standard Time", "Antarctica/Rothera" }, + { "SA Eastern Standard Time", "Antarctica/Rothera Antarctica/Palmer" }, { "SA Eastern Standard Time", "Atlantic/Stanley" }, { "SA Eastern Standard Time", "Etc/GMT+3" }, { "SA Pacific Standard Time", "America/Bogota" }, + { "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" }, @@ -269,6 +339,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "SA Western Standard Time", "America/Guyana" }, { "SA Western Standard Time", "America/Kralendijk" }, { "SA Western Standard Time", "America/La_Paz" }, + { "SA Western Standard Time", "America/La_Paz" }, { "SA Western Standard Time", "America/Lower_Princes" }, { "SA Western Standard Time", "America/Manaus America/Boa_Vista America/Porto_Velho" }, { "SA Western Standard Time", "America/Marigot" }, @@ -284,30 +355,39 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "SA Western Standard Time", "America/St_Vincent" }, { "SA Western Standard Time", "America/Tortola" }, { "SA Western Standard Time", "Etc/GMT+4" }, - { "Saint Pierre Standard Time", "America/Miquelon" }, - { "Sakhalin Standard Time", "Asia/Sakhalin" }, - { "Samoa Standard Time", "Pacific/Apia" }, - { "Sao Tome Standard Time", "Africa/Sao_Tome" }, - { "Saratov Standard Time", "Europe/Saratov" }, { "SE Asia Standard Time", "Antarctica/Davis" }, { "SE Asia Standard Time", "Asia/Bangkok" }, + { "SE Asia Standard Time", "Asia/Bangkok" }, { "SE Asia Standard Time", "Asia/Jakarta Asia/Pontianak" }, { "SE Asia Standard Time", "Asia/Phnom_Penh" }, { "SE Asia Standard Time", "Asia/Saigon" }, { "SE Asia Standard Time", "Asia/Vientiane" }, { "SE Asia Standard Time", "Etc/GMT-7" }, { "SE Asia Standard Time", "Indian/Christmas" }, + { "Saint Pierre Standard Time", "America/Miquelon" }, + { "Saint Pierre Standard Time", "America/Miquelon" }, + { "Sakhalin Standard Time", "Asia/Sakhalin" }, + { "Sakhalin Standard Time", "Asia/Sakhalin" }, + { "Samoa Standard Time", "Pacific/Apia" }, + { "Samoa Standard Time", "Pacific/Apia" }, + { "Sao Tome Standard Time", "Africa/Sao_Tome" }, + { "Sao Tome Standard Time", "Africa/Sao_Tome" }, + { "Saratov Standard Time", "Europe/Saratov" }, + { "Saratov Standard Time", "Europe/Saratov" }, + { "Singapore Standard Time", "Antarctica/Casey" }, { "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", "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/Johannesburg" }, { "South Africa Standard Time", "Africa/Kigali" }, { "South Africa Standard Time", "Africa/Lubumbashi" }, { "South Africa Standard Time", "Africa/Lusaka" }, @@ -316,35 +396,46 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "South Africa Standard Time", "Africa/Mbabane" }, { "South Africa Standard Time", "Etc/GMT-2" }, { "Sri Lanka Standard Time", "Asia/Colombo" }, + { "Sri Lanka Standard Time", "Asia/Colombo" }, + { "Sudan Standard Time", "Africa/Khartoum" }, { "Sudan Standard Time", "Africa/Khartoum" }, { "Syria Standard Time", "Asia/Damascus" }, + { "Syria Standard Time", "Asia/Damascus" }, + { "Taipei Standard Time", "Asia/Taipei" }, { "Taipei Standard Time", "Asia/Taipei" }, { "Tasmania Standard Time", "Australia/Hobart Australia/Currie" }, { "Tasmania Standard Time", "Australia/Hobart" }, { "Tocantins Standard Time", "America/Araguaina" }, + { "Tocantins Standard Time", "America/Araguaina" }, { "Tokyo Standard Time", "Asia/Dili" }, { "Tokyo Standard Time", "Asia/Jayapura" }, { "Tokyo Standard Time", "Asia/Tokyo" }, + { "Tokyo Standard Time", "Asia/Tokyo" }, { "Tokyo Standard Time", "Etc/GMT-9" }, { "Tokyo Standard Time", "Pacific/Palau" }, { "Tomsk Standard Time", "Asia/Tomsk" }, + { "Tomsk Standard Time", "Asia/Tomsk" }, + { "Tonga Standard Time", "Pacific/Tongatapu" }, { "Tonga Standard Time", "Pacific/Tongatapu" }, { "Transbaikal Standard Time", "Asia/Chita" }, + { "Transbaikal Standard Time", "Asia/Chita" }, + { "Turkey Standard Time", "Europe/Istanbul" }, { "Turkey Standard Time", "Europe/Istanbul" }, { "Turks And Caicos Standard Time", "America/Grand_Turk" }, - { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar Asia/Choibalsan" }, - { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, + { "Turks And Caicos Standard Time", "America/Grand_Turk" }, { "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 America/Creston America/Fort_Nelson" }, { "US Mountain Standard Time", "America/Hermosillo" }, { "US Mountain Standard Time", "America/Phoenix" }, + { "US Mountain Standard Time", "America/Phoenix" }, { "US Mountain Standard Time", "Etc/GMT+7" }, { "UTC", "America/Danmarkshavn" }, { "UTC", "Etc/GMT Etc/UTC" }, { "UTC", "Etc/GMT" }, { "UTC+12", "Etc/GMT-12" }, + { "UTC+12", "Etc/GMT-12" }, { "UTC+12", "Pacific/Funafuti" }, { "UTC+12", "Pacific/Majuro Pacific/Kwajalein" }, { "UTC+12", "Pacific/Nauru" }, @@ -352,23 +443,33 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "UTC+12", "Pacific/Wake" }, { "UTC+12", "Pacific/Wallis" }, { "UTC+13", "Etc/GMT-13" }, + { "UTC+13", "Etc/GMT-13" }, { "UTC+13", "Pacific/Enderbury" }, { "UTC+13", "Pacific/Fakaofo" }, { "UTC-02", "America/Noronha" }, { "UTC-02", "Atlantic/South_Georgia" }, { "UTC-02", "Etc/GMT+2" }, + { "UTC-02", "Etc/GMT+2" }, + { "UTC-08", "Etc/GMT+8" }, { "UTC-08", "Etc/GMT+8" }, { "UTC-08", "Pacific/Pitcairn" }, { "UTC-09", "Etc/GMT+9" }, + { "UTC-09", "Etc/GMT+9" }, { "UTC-09", "Pacific/Gambier" }, { "UTC-11", "Etc/GMT+11" }, + { "UTC-11", "Etc/GMT+11" }, { "UTC-11", "Pacific/Midway" }, { "UTC-11", "Pacific/Niue" }, { "UTC-11", "Pacific/Pago_Pago" }, + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar Asia/Choibalsan" }, + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, + { "Venezuela Standard Time", "America/Caracas" }, { "Venezuela Standard Time", "America/Caracas" }, { "Vladivostok Standard Time", "Asia/Vladivostok Asia/Ust-Nera" }, { "Vladivostok Standard Time", "Asia/Vladivostok" }, - { "W. Australia Standard Time", "Antarctica/Casey" }, + { "Volgograd Standard Time", "Europe/Volgograd" }, + { "Volgograd Standard Time", "Europe/Volgograd" }, + { "W. Australia Standard Time", "Australia/Perth" }, { "W. Australia Standard Time", "Australia/Perth" }, { "W. Central Africa Standard Time", "Africa/Algiers" }, { "W. Central Africa Standard Time", "Africa/Bangui" }, @@ -376,6 +477,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "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/Lagos" }, { "W. Central Africa Standard Time", "Africa/Libreville" }, { "W. Central Africa Standard Time", "Africa/Luanda" }, { "W. Central Africa Standard Time", "Africa/Malabo" }, @@ -402,6 +504,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "W. Europe Standard Time", "Europe/Vienna" }, { "W. Europe Standard Time", "Europe/Zurich" }, { "W. Mongolia Standard Time", "Asia/Hovd" }, + { "W. Mongolia Standard Time", "Asia/Hovd" }, { "West Asia Standard Time", "Antarctica/Mawson" }, { "West Asia Standard Time", "Asia/Ashgabat" }, { "West Asia Standard Time", "Asia/Dushanbe" }, @@ -417,8 +520,11 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { { "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/Port_Moresby" }, { "West Pacific Standard Time", "Pacific/Saipan" }, { "West Pacific Standard Time", "Pacific/Truk" }, { "Yakutsk Standard Time", "Asia/Yakutsk Asia/Khandyga" }, { "Yakutsk Standard Time", "Asia/Yakutsk" }, }; + +const size_t WindowsTimeZoneIdTableNrElements = ARRAYSIZE(WindowsTimeZoneIdTable); diff --git a/winpr/libwinpr/timezone/WindowsZones.h b/winpr/libwinpr/timezone/WindowsZones.h new file mode 100644 index 000000000..2972ee5f0 --- /dev/null +++ b/winpr/libwinpr/timezone/WindowsZones.h @@ -0,0 +1,19 @@ +/* + * Automatically generated with scripts/update-windows-zones.py + */ +#ifndef WINPR_WINDOWS_ZONES_H_ +#define WINPR_WINDOWS_ZONES_H_ + +#include + +struct _WINDOWS_TZID_ENTRY +{ + const char* windows; + const char* tzid; +}; +typedef struct _WINDOWS_TZID_ENTRY WINDOWS_TZID_ENTRY; + +extern const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[]; +extern const size_t WindowsTimeZoneIdTableNrElements; + +#endif /* WINPR_WINDOWS_ZONES_H_ */ diff --git a/winpr/libwinpr/timezone/timezone.c b/winpr/libwinpr/timezone/timezone.c index 8a07c795a..80bc51c2a 100644 --- a/winpr/libwinpr/timezone/timezone.c +++ b/winpr/libwinpr/timezone/timezone.c @@ -33,11 +33,8 @@ #include #include -/* Table generated with TimeZones.csx */ -#include "TimeZones.c" - -/* Table generated with WindowsZones.csx */ -#include "WindowsZones.c" +#include "TimeZones.h" +#include "WindowsZones.h" static UINT64 winpr_windows_gmtime(void) { @@ -277,7 +274,7 @@ static TIME_ZONE_ENTRY* winpr_detect_windows_time_zone(void) { size_t i, j; char* tzid; - TIME_ZONE_ENTRY* timezone; + tzid = winpr_get_unix_timezone_identifier_from_file(); if (tzid == NULL) @@ -286,18 +283,21 @@ static TIME_ZONE_ENTRY* winpr_detect_windows_time_zone(void) if (tzid == NULL) return NULL; - for (i = 0; i < ARRAYSIZE(TimeZoneTable); i++) + for (i = 0; i < TimeZoneTableNrElements; i++) { - for (j = 0; j < ARRAYSIZE(WindowsTimeZoneIdTable); j++) + const TIME_ZONE_ENTRY* tze = &TimeZoneTable[i]; + + for (j = 0; j < WindowsTimeZoneIdTableNrElements; j++) { - if (strcmp(TimeZoneTable[i].Id, WindowsTimeZoneIdTable[j].windows) != 0) + const WINDOWS_TZID_ENTRY* wzid = &WindowsTimeZoneIdTable[j]; + + if (strcmp(tze->Id, wzid->windows) != 0) continue; - if (winpr_match_unix_timezone_identifier_with_list(tzid, - WindowsTimeZoneIdTable[j].tzid)) + if (winpr_match_unix_timezone_identifier_with_list(tzid, wzid->tzid)) { + TIME_ZONE_ENTRY* timezone = (TIME_ZONE_ENTRY*)malloc(sizeof(TIME_ZONE_ENTRY)); free(tzid); - timezone = (TIME_ZONE_ENTRY*)malloc(sizeof(TIME_ZONE_ENTRY)); if (!timezone) return NULL; From c9dd343a65c6b01eeaae6b4d3d3733e289899822 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Fri, 6 Dec 2019 11:01:36 +0100 Subject: [PATCH 3/3] update timezones. --- scripts/TimeZones.csx | 30 +- winpr/libwinpr/timezone/TimeZones.c | 927 ++++++++++++---------------- 2 files changed, 397 insertions(+), 560 deletions(-) diff --git a/scripts/TimeZones.csx b/scripts/TimeZones.csx index 865b466e2..d0a39ba00 100644 --- a/scripts/TimeZones.csx +++ b/scripts/TimeZones.csx @@ -69,31 +69,7 @@ stream.WriteLine(" * Automatically generated with scripts/TimeZones.csx"); stream.WriteLine(" */ "); stream.WriteLine(); -stream.WriteLine("#pragma pack(push, 1)"); -stream.WriteLine("struct _TIME_ZONE_RULE_ENTRY"); -stream.WriteLine("{"); -stream.WriteLine("\tUINT64 TicksStart;"); -stream.WriteLine("\tUINT64 TicksEnd;"); -stream.WriteLine("\tINT32 DaylightDelta;"); -stream.WriteLine("\tSYSTEMTIME StandardDate;"); -stream.WriteLine("\tSYSTEMTIME DaylightDate;"); -stream.WriteLine("};"); -stream.WriteLine("typedef struct _TIME_ZONE_RULE_ENTRY TIME_ZONE_RULE_ENTRY;"); -stream.WriteLine(); - -stream.WriteLine("struct _TIME_ZONE_ENTRY"); -stream.WriteLine("{"); -stream.WriteLine("\tconst char* Id;"); -stream.WriteLine("\tINT32 Bias;"); -stream.WriteLine("\tBOOL SupportsDST;"); -stream.WriteLine("\tconst char* DisplayName;"); -stream.WriteLine("\tconst char* StandardName;"); -stream.WriteLine("\tconst char* DaylightName;"); -stream.WriteLine("\tconst TIME_ZONE_RULE_ENTRY* RuleTable;"); -stream.WriteLine("\tUINT32 RuleTableCount;"); -stream.WriteLine("};"); -stream.WriteLine("typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY;"); -stream.WriteLine("#pragma pack(pop)"); +stream.WriteLine("#include \"TimeZones.h\""); stream.WriteLine(); index = 0; @@ -175,7 +151,7 @@ foreach (TimeZoneInfo timeZone in timeZones) } index = 0; -stream.WriteLine("static const TIME_ZONE_ENTRY TimeZoneTable[] ="); +stream.WriteLine("const TIME_ZONE_ENTRY TimeZoneTable[] ="); stream.WriteLine("{"); foreach (TimeZoneInfo timeZone in timeZones) @@ -222,6 +198,8 @@ foreach (TimeZoneInfo timeZone in timeZones) } stream.WriteLine("};"); stream.WriteLine(); +stream.WriteLine("const size_t TimeZoneTableNrElements = ARRAYSIZE(TimeZoneTable);"); +stream.WriteLine(); stream.Close(); diff --git a/winpr/libwinpr/timezone/TimeZones.c b/winpr/libwinpr/timezone/TimeZones.c index d8b628029..9d554dadc 100644 --- a/winpr/libwinpr/timezone/TimeZones.c +++ b/winpr/libwinpr/timezone/TimeZones.c @@ -166,11 +166,32 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_15[] = { { { 0, 1, 0, 1, 0, 0, 0, 0 }, }, { - 3155378076000000000ULL, + 636187356000000000ULL, 635871996000000000ULL, 60, { 0, 5, 6, 2, 22, 0, 0, 0 }, { 0, 8, 6, 2, 22, 0, 0, 0 }, + }, + { + 636502716000000000ULL, + 636188220000000000ULL, + 60, + { 0, 5, 6, 2, 22, 0, 0, 0 }, + { 0, 8, 6, 2, 22, 0, 0, 0 }, + }, + { + 636818076000000000ULL, + 636503580000000000ULL, + 60, + { 0, 5, 6, 2, 22, 0, 0, 0 }, + { 0, 8, 6, 2, 22, 0, 0, 0 }, + }, + { + 3155378076000000000ULL, + 636818940000000000ULL, + 60, + { 0, 4, 6, 1, 22, 0, 0, 0 }, + { 0, 9, 6, 1, 22, 0, 0, 0 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_16[] = { { @@ -380,7 +401,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_24[] = { { 636503580000000000ULL, 60, { 0, 11, 0, 1, 2, 0, 0, 0 }, - { 0, 1, 1, 1, 0, 0, 0, 0 }, + { 0, 3, 0, 2, 2, 0, 0, 0 }, }, { 3155378076000000000ULL, @@ -684,155 +705,8 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_28[] = { { 637133436000000000ULL, 636818940000000000ULL, 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 637449660000000000ULL, - 637134300000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 637765020000000000ULL, - 637450524000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638080380000000000ULL, - 637765884000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638395740000000000ULL, - 638081244000000000ULL, - 60, - { 0, 2, 6, 5, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638711964000000000ULL, - 638396604000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639027324000000000ULL, - 638712828000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639342684000000000ULL, - 639028188000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 639658044000000000ULL, - 639343548000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639974268000000000ULL, - 639658908000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640289628000000000ULL, - 639975132000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640604988000000000ULL, - 640290492000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640920348000000000ULL, - 640605852000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641236572000000000ULL, - 640921212000000000ULL, - 60, - { 0, 2, 6, 2, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641551932000000000ULL, - 641237436000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641867292000000000ULL, - 641552796000000000ULL, - 60, - { 0, 2, 6, 5, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642182652000000000ULL, - 641868156000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642498876000000000ULL, - 642183516000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642814236000000000ULL, - 642499740000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 643129596000000000ULL, - 642815100000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 643444956000000000ULL, - 643130460000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 3155378076000000000ULL, - 643445820000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, + { 0, 2, 0, 3, 0, 0, 0, 0 }, + { 0, 1, 2, 1, 0, 0, 0, 0 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_30[] = { { @@ -899,11 +773,32 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_30[] = { { { 0, 1, 0, 1, 0, 0, 0, 0 }, }, { - 3155378076000000000ULL, + 636187356000000000ULL, 635871996000000000ULL, 60, { 0, 5, 6, 2, 23, 59, 59, 999 }, { 0, 8, 6, 2, 23, 59, 59, 999 }, + }, + { + 636502716000000000ULL, + 636188220000000000ULL, + 60, + { 0, 5, 6, 2, 23, 59, 59, 999 }, + { 0, 8, 6, 2, 23, 59, 59, 999 }, + }, + { + 636818076000000000ULL, + 636503580000000000ULL, + 60, + { 0, 5, 6, 2, 23, 59, 59, 999 }, + { 0, 8, 6, 2, 23, 59, 59, 999 }, + }, + { + 3155378076000000000ULL, + 636818940000000000ULL, + 60, + { 0, 4, 6, 1, 23, 59, 59, 999 }, + { 0, 9, 6, 1, 23, 59, 59, 999 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_31[] = { { @@ -1080,155 +975,8 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_33[] = { { 637133436000000000ULL, 636818940000000000ULL, 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 637449660000000000ULL, - 637134300000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 637765020000000000ULL, - 637450524000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638080380000000000ULL, - 637765884000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638395740000000000ULL, - 638081244000000000ULL, - 60, - { 0, 2, 6, 5, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 638711964000000000ULL, - 638396604000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639027324000000000ULL, - 638712828000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639342684000000000ULL, - 639028188000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 639658044000000000ULL, - 639343548000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 639974268000000000ULL, - 639658908000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640289628000000000ULL, - 639975132000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640604988000000000ULL, - 640290492000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 640920348000000000ULL, - 640605852000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641236572000000000ULL, - 640921212000000000ULL, - 60, - { 0, 2, 6, 2, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641551932000000000ULL, - 641237436000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 641867292000000000ULL, - 641552796000000000ULL, - 60, - { 0, 2, 6, 5, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642182652000000000ULL, - 641868156000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642498876000000000ULL, - 642183516000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 642814236000000000ULL, - 642499740000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 10, 6, 5, 23, 59, 59, 999 }, - }, - { - 643129596000000000ULL, - 642815100000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 643444956000000000ULL, - 643130460000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, - }, - { - 3155378076000000000ULL, - 643445820000000000ULL, - 60, - { 0, 2, 6, 3, 23, 59, 59, 999 }, - { 0, 11, 6, 1, 23, 59, 59, 999 }, + { 0, 2, 0, 3, 0, 0, 0, 0 }, + { 0, 1, 2, 1, 0, 0, 0, 0 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_35[] = { { @@ -1506,6 +1254,29 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_43[] = { { } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_46[] = { { + 3155378076000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 3, 0, 5, 1, 0, 0, 0 }, +} }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_48[] = { { + 636818076000000000ULL, + 636503580000000000ULL, + -60, + { 0, 1, 1, 1, 1, 0, 0, 0 }, + { 0, 1, 1, 1, 0, 0, 0, 0 }, + }, + { + 637133436000000000ULL, + 636818940000000000ULL, + 60, + { 0, 1, 2, 1, 2, 0, 0, 0 }, + { 0, 1, 2, 1, 0, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_49[] = { { 633662748000000000ULL, 633347388000000000ULL, 60, @@ -1579,33 +1350,24 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_46[] = { { 636818076000000000ULL, 636503580000000000ULL, 60, - { 0, 10, 0, 5, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, + { 0, 10, 0, 4, 3, 0, 0, 0 }, + { 0, 3, 0, 4, 2, 0, 0, 0 }, + }, + { + 637133436000000000ULL, + 636818940000000000ULL, + 60, + { 0, 1, 2, 1, 0, 0, 0, 0 }, + { 0, 6, 0, 2, 2, 0, 0, 0 }, }, { 3155378076000000000ULL, - 636818940000000000ULL, + 637134300000000000ULL, 60, - { 0, 10, 0, 4, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, + { 0, 4, 0, 3, 3, 0, 0, 0 }, + { 0, 5, 0, 4, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_47[] = { { - 3155378076000000000ULL, - 0ULL, - 60, - { 0, 10, 0, 5, 2, 0, 0, 0 }, - { 0, 3, 0, 5, 1, 0, 0, 0 }, -} }; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_49[] = { { - 3155378076000000000ULL, - 0ULL, - 60, - { 0, 10, 0, 5, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, -} }; - static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_50[] = { { 3155378076000000000ULL, 0ULL, @@ -1623,19 +1385,12 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_51[] = { { } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_52[] = { { - 636502716000000000ULL, - 0ULL, - 0, - { 0, 1, 0, 1, 0, 0, 0, 1 }, - { 0, 1, 0, 1, 0, 0, 0, 0 }, - }, - { - 636818076000000000ULL, - 636503580000000000ULL, - -60, - { 0, 1, 1, 1, 1, 0, 0, 0 }, - { 0, 1, 1, 1, 0, 0, 0, 0 }, - } }; + 3155378076000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 3, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, +} }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_53[] = { { 3155378076000000000ULL, @@ -1995,11 +1750,25 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_61[] = { { { 0, 3, 6, 5, 1, 0, 0, 0 }, }, { - 3155378076000000000ULL, + 636818076000000000ULL, 636503580000000000ULL, 60, { 0, 10, 6, 5, 1, 0, 0, 0 }, { 0, 3, 6, 4, 1, 0, 0, 0 }, + }, + { + 637133436000000000ULL, + 636818940000000000ULL, + 60, + { 0, 10, 6, 4, 1, 0, 0, 0 }, + { 0, 3, 5, 5, 0, 0, 0, 0 }, + }, + { + 3155378076000000000ULL, + 637134300000000000ULL, + 60, + { 0, 10, 6, 5, 1, 0, 0, 0 }, + { 0, 3, 5, 4, 0, 0, 0, 0 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_63[] = { { @@ -2607,6 +2376,56 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_81[] = { { } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_83[] = { { + 634293468000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 3, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 634608828000000000ULL, + 634294332000000000ULL, + 60, + { 0, 1, 6, 1, 0, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 635555772000000000ULL, + 635241276000000000ULL, + 60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 3, 1, 0, 0, 0, 0 }, + }, + { + 635871132000000000ULL, + 635556636000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636187356000000000ULL, + 635871996000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636502716000000000ULL, + 636188220000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636818076000000000ULL, + 636503580000000000ULL, + -60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 1, 1, 0, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_84[] = { { 634608828000000000ULL, 0ULL, 60, @@ -2614,7 +2433,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_83[] = { { { 0, 3, 0, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_86[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_87[] = { { 634293468000000000ULL, 0ULL, 60, @@ -2650,7 +2469,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_86[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_87[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_88[] = { { 633662748000000000ULL, 633347388000000000ULL, 60, @@ -2665,7 +2484,22 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_87[] = { { { 0, 4, 2, 2, 23, 59, 59, 999 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_92[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_89[] = { { + 636502716000000000ULL, + 0ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636818076000000000ULL, + 636503580000000000ULL, + 60, + { 0, 12, 5, 3, 0, 0, 0, 0 }, + { 0, 1, 1, 1, 0, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_94[] = { { 633978108000000000ULL, 633663612000000000ULL, 60, @@ -2673,7 +2507,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_92[] = { { { 0, 6, 5, 3, 23, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_93[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_95[] = { { 634293468000000000ULL, 0ULL, 60, @@ -2709,7 +2543,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_93[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_96[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = { { 634293468000000000ULL, 0ULL, 60, @@ -2745,7 +2579,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_96[] = { { { 0, 1, 5, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_99[] = { { 633031164000000000ULL, 0ULL, 60, @@ -2767,78 +2601,6 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = { { { 0, 3, 6, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = { { - 634293468000000000ULL, - 0ULL, - 60, - { 0, 10, 0, 5, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, - { - 634608828000000000ULL, - 634294332000000000ULL, - 60, - { 0, 1, 6, 1, 0, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, - { - 634925052000000000ULL, - 634609692000000000ULL, - 0, - { 0, 1, 0, 1, 0, 0, 0, 1 }, - { 0, 1, 0, 1, 0, 0, 0, 0 }, - }, - { - 635240412000000000ULL, - 634925916000000000ULL, - 0, - { 0, 1, 0, 1, 0, 0, 0, 1 }, - { 0, 1, 0, 1, 0, 0, 0, 0 }, - }, - { - 635555772000000000ULL, - 635241276000000000ULL, - 60, - { 0, 10, 0, 5, 2, 0, 0, 0 }, - { 0, 1, 3, 1, 0, 0, 0, 0 }, - } }; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_99[] = { { - 634293468000000000ULL, - 0ULL, - 60, - { 0, 10, 0, 5, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, - { - 634608828000000000ULL, - 634294332000000000ULL, - 60, - { 0, 1, 6, 1, 0, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, - { - 635555772000000000ULL, - 635241276000000000ULL, - 60, - { 0, 10, 0, 5, 2, 0, 0, 0 }, - { 0, 1, 3, 1, 0, 0, 0, 0 }, - }, - { - 635871132000000000ULL, - 635556636000000000ULL, - 0, - { 0, 1, 0, 1, 0, 0, 0, 1 }, - { 0, 1, 0, 1, 0, 0, 0, 0 }, - }, - { - 636187356000000000ULL, - 635871996000000000ULL, - -60, - { 0, 7, 0, 4, 2, 0, 0, 0 }, - { 0, 1, 5, 1, 0, 0, 0, 0 }, - } }; - static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_100[] = { { 634293468000000000ULL, 0ULL, @@ -2853,42 +2615,6 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_100[] = { { { 0, 1, 6, 1, 0, 0, 0, 0 }, { 0, 3, 0, 5, 2, 0, 0, 0 }, }, - { - 635555772000000000ULL, - 635241276000000000ULL, - 60, - { 0, 10, 0, 5, 2, 0, 0, 0 }, - { 0, 1, 3, 1, 0, 0, 0, 0 }, - }, - { - 635871132000000000ULL, - 635556636000000000ULL, - 0, - { 0, 1, 0, 1, 0, 0, 0, 1 }, - { 0, 1, 0, 1, 0, 0, 0, 0 }, - }, - { - 636187356000000000ULL, - 635871996000000000ULL, - -60, - { 0, 5, 0, 5, 2, 0, 0, 0 }, - { 0, 1, 5, 1, 0, 0, 0, 0 }, - } }; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_102[] = { { - 634293468000000000ULL, - 0ULL, - 60, - { 0, 10, 0, 5, 3, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, - { - 634608828000000000ULL, - 634294332000000000ULL, - 60, - { 0, 1, 6, 1, 0, 0, 0, 0 }, - { 0, 3, 0, 5, 2, 0, 0, 0 }, - }, { 634925052000000000ULL, 634609692000000000ULL, @@ -2911,7 +2637,115 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_102[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_101[] = { { + 634293468000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 3, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 634608828000000000ULL, + 634294332000000000ULL, + 60, + { 0, 1, 6, 1, 0, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 635555772000000000ULL, + 635241276000000000ULL, + 60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 3, 1, 0, 0, 0, 0 }, + }, + { + 635871132000000000ULL, + 635556636000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636187356000000000ULL, + 635871996000000000ULL, + -60, + { 0, 7, 0, 4, 2, 0, 0, 0 }, + { 0, 1, 5, 1, 0, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_102[] = { { + 634293468000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 3, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 634608828000000000ULL, + 634294332000000000ULL, + 60, + { 0, 1, 6, 1, 0, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 635555772000000000ULL, + 635241276000000000ULL, + 60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 3, 1, 0, 0, 0, 0 }, + }, + { + 635871132000000000ULL, + 635556636000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 636187356000000000ULL, + 635871996000000000ULL, + -60, + { 0, 5, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 5, 1, 0, 0, 0, 0 }, + } }; + static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_104[] = { { + 634293468000000000ULL, + 0ULL, + 60, + { 0, 10, 0, 5, 3, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 634608828000000000ULL, + 634294332000000000ULL, + 60, + { 0, 1, 6, 1, 0, 0, 0, 0 }, + { 0, 3, 0, 5, 2, 0, 0, 0 }, + }, + { + 634925052000000000ULL, + 634609692000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 635240412000000000ULL, + 634925916000000000ULL, + 0, + { 0, 1, 0, 1, 0, 0, 0, 1 }, + { 0, 1, 0, 1, 0, 0, 0, 0 }, + }, + { + 635555772000000000ULL, + 635241276000000000ULL, + 60, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + { 0, 1, 3, 1, 0, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_106[] = { { 633031164000000000ULL, 632716668000000000ULL, 60, @@ -2940,7 +2774,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_104[] = { { { 0, 1, 4, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_106[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_108[] = { { 635871132000000000ULL, 635556636000000000ULL, 60, @@ -2955,7 +2789,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_106[] = { { { 0, 3, 6, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_108[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_110[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3005,7 +2839,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_108[] = { { { 0, 1, 5, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_110[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_112[] = { { 635871132000000000ULL, 635556636000000000ULL, 30, @@ -3034,7 +2868,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_110[] = { { { 0, 1, 1, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_112[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_114[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3070,22 +2904,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_112[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_113[] = { { - 633346524000000000ULL, - 0ULL, - 60, - { 0, 3, 0, 5, 3, 0, 0, 0 }, - { 0, 10, 0, 5, 2, 0, 0, 0 }, - }, - { - 3155378076000000000ULL, - 633347388000000000ULL, - 60, - { 0, 4, 0, 1, 3, 0, 0, 0 }, - { 0, 10, 0, 1, 2, 0, 0, 0 }, - } }; - -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_116[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_115[] = { { 633346524000000000ULL, 0ULL, 60, @@ -3101,6 +2920,21 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_116[] = { { } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_118[] = { { + 633346524000000000ULL, + 0ULL, + 60, + { 0, 3, 0, 5, 3, 0, 0, 0 }, + { 0, 10, 0, 5, 2, 0, 0, 0 }, + }, + { + 3155378076000000000ULL, + 633347388000000000ULL, + 60, + { 0, 4, 0, 1, 3, 0, 0, 0 }, + { 0, 10, 0, 1, 2, 0, 0, 0 }, + } }; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_120[] = { { 633346524000000000ULL, 0ULL, 60, @@ -3115,7 +2949,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_118[] = { { { 0, 10, 0, 1, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_119[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_121[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3151,7 +2985,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_119[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_120[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_122[] = { { 632715804000000000ULL, 0ULL, 30, @@ -3180,7 +3014,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_120[] = { { { 0, 10, 0, 1, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_121[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_123[] = { { 635240412000000000ULL, 0ULL, 0, @@ -3195,7 +3029,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_121[] = { { { 0, 12, 0, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_122[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_124[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3231,7 +3065,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_122[] = { { { 0, 1, 3, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_123[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_125[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3281,7 +3115,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_123[] = { { { 0, 1, 5, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_124[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_126[] = { { 635555772000000000ULL, 0ULL, 0, @@ -3294,9 +3128,23 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_124[] = { { 30, { 0, 10, 0, 1, 2, 0, 0, 0 }, { 0, 1, 4, 1, 0, 0, 0, 0 }, + }, + { + 637133436000000000ULL, + 636818940000000000ULL, + 60, + { 0, 1, 2, 1, 0, 0, 0, 0 }, + { 0, 10, 0, 1, 2, 0, 0, 0 }, + }, + { + 3155378076000000000ULL, + 637134300000000000ULL, + 60, + { 0, 4, 0, 1, 3, 0, 0, 0 }, + { 0, 10, 0, 1, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_125[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_127[] = { { 634293468000000000ULL, 0ULL, 60, @@ -3332,7 +3180,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_125[] = { { { 0, 1, 5, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_127[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_129[] = { { 633978108000000000ULL, 0ULL, 60, @@ -3354,7 +3202,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_127[] = { { { 0, 3, 0, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_128[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_130[] = { { 633031164000000000ULL, 0ULL, 60, @@ -3376,7 +3224,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_128[] = { { { 0, 9, 0, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_130[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_132[] = { { 633978108000000000ULL, 633663612000000000ULL, 60, @@ -3447,14 +3295,21 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_130[] = { { { 0, 11, 0, 1, 2, 0, 0, 0 }, }, { - 3155378076000000000ULL, + 637133436000000000ULL, 636818940000000000ULL, 60, - { 0, 1, 0, 3, 3, 0, 0, 0 }, - { 0, 11, 0, 1, 2, 0, 0, 0 }, + { 0, 1, 0, 2, 3, 0, 0, 0 }, + { 0, 11, 0, 2, 2, 0, 0, 0 }, + }, + { + 3155378076000000000ULL, + 637134300000000000ULL, + 60, + { 0, 1, 0, 2, 3, 0, 0, 0 }, + { 0, 11, 0, 2, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_131[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_133[] = { { 3155378076000000000ULL, 0ULL, 60, @@ -3462,7 +3317,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_131[] = { { { 0, 3, 0, 5, 2, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_132[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_134[] = { { 633031164000000000ULL, 0ULL, 60, @@ -3484,7 +3339,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_132[] = { { { 0, 9, 0, 5, 2, 45, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_134[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_136[] = { { 636187356000000000ULL, 635871996000000000ULL, 60, @@ -3499,7 +3354,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_134[] = { { { 0, 1, 0, 1, 0, 0, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_135[] = { { +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_137[] = { { 633978108000000000ULL, 0ULL, 0, @@ -3561,7 +3416,7 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { { "Central Standard Time", 360, TRUE, "(UTC-06:00) Central Time (US & Canada)", "Central Standard Time", "Central Daylight Time", TimeZoneRuleTable_14, 2 }, { "Easter Island Standard Time", 360, TRUE, "(UTC-06:00) Easter Island", - "Easter Island Standard Time", "Easter Island Daylight Time", TimeZoneRuleTable_15, 10 }, + "Easter Island Standard Time", "Easter Island Daylight Time", TimeZoneRuleTable_15, 13 }, { "Central Standard Time (Mexico)", 360, TRUE, "(UTC-06:00) Guadalajara, Mexico City, Monterrey", "Central Standard Time (Mexico)", "Central Daylight Time (Mexico)", TimeZoneRuleTable_16, 1 }, @@ -3589,18 +3444,18 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { "Venezuela Daylight Time", TimeZoneRuleTable_27, 10 }, { "Central Brazilian Standard Time", 240, TRUE, "(UTC-04:00) Cuiaba", "Central Brazilian Standard Time", "Central Brazilian Daylight Time", TimeZoneRuleTable_28, - 37 }, + 16 }, { "SA Western Standard Time", 240, FALSE, "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan", "SA Western Standard Time", "SA Western Daylight Time", NULL, 0 }, { "Pacific SA Standard Time", 240, TRUE, "(UTC-04:00) Santiago", "Pacific SA Standard Time", - "Pacific SA Daylight Time", TimeZoneRuleTable_30, 10 }, + "Pacific SA Daylight Time", TimeZoneRuleTable_30, 13 }, { "Newfoundland Standard Time", 210, TRUE, "(UTC-03:30) Newfoundland", "Newfoundland Standard Time", "Newfoundland Daylight Time", TimeZoneRuleTable_31, 7 }, { "Tocantins Standard Time", 180, TRUE, "(UTC-03:00) Araguaina", "Tocantins Standard Time", "Tocantins Daylight Time", TimeZoneRuleTable_32, 2 }, { "E. South America Standard Time", 180, TRUE, "(UTC-03:00) Brasilia", "E. South America Standard Time", "E. South America Daylight Time", TimeZoneRuleTable_33, - 37 }, + 16 }, { "SA Eastern Standard Time", 180, FALSE, "(UTC-03:00) Cayenne, Fortaleza", "SA Eastern Standard Time", "SA Eastern Daylight Time", NULL, 0 }, { "Argentina Standard Time", 180, TRUE, "(UTC-03:00) City of Buenos Aires", @@ -3625,22 +3480,22 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { "Cabo Verde Standard Time", "Cabo Verde Daylight Time", NULL, 0 }, { "UTC", 0, FALSE, "(UTC) Coordinated Universal Time", "Coordinated Universal Time", "Coordinated Universal Time", NULL, 0 }, - { "Morocco Standard Time", 0, TRUE, "(UTC+00:00) Casablanca", "Morocco Standard Time", - "Morocco Daylight Time", TimeZoneRuleTable_46, 12 }, { "GMT Standard Time", 0, TRUE, "(UTC+00:00) Dublin, Edinburgh, Lisbon, London", - "GMT Standard Time", "GMT Daylight Time", TimeZoneRuleTable_47, 1 }, + "GMT Standard Time", "GMT Daylight Time", TimeZoneRuleTable_46, 1 }, { "Greenwich Standard Time", 0, FALSE, "(UTC+00:00) Monrovia, Reykjavik", "Greenwich Standard Time", "Greenwich Daylight Time", NULL, 0 }, + { "Sao Tome Standard Time", 0, TRUE, "(UTC+00:00) Sao Tome", "Sao Tome Standard Time", + "Sao Tome Daylight Time", TimeZoneRuleTable_48, 2 }, + { "Morocco Standard Time", 0, TRUE, "(UTC+01:00) Casablanca", "Morocco Standard Time", + "Morocco Daylight Time", TimeZoneRuleTable_49, 13 }, { "W. Europe Standard Time", -60, TRUE, "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", "W. Europe Standard Time", - "W. Europe Daylight Time", TimeZoneRuleTable_49, 1 }, + "W. Europe Daylight Time", TimeZoneRuleTable_50, 1 }, { "Central Europe Standard Time", -60, TRUE, "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", - "Central Europe Standard Time", "Central Europe Daylight Time", TimeZoneRuleTable_50, 1 }, + "Central Europe Standard Time", "Central Europe Daylight Time", TimeZoneRuleTable_51, 1 }, { "Romance Standard Time", -60, TRUE, "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", - "Romance Standard Time", "Romance Daylight Time", TimeZoneRuleTable_51, 1 }, - { "Sao Tome Standard Time", -60, TRUE, "(UTC+01:00) Sao Tome", "Sao Tome Standard Time", - "Sao Tome Daylight Time", TimeZoneRuleTable_52, 2 }, + "Romance Standard Time", "Romance Daylight Time", TimeZoneRuleTable_52, 1 }, { "Central European Standard Time", -60, TRUE, "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb", "Central European Standard Time", "Central European Daylight Time", TimeZoneRuleTable_53, 1 }, { "W. Central Africa Standard Time", -60, FALSE, "(UTC+01:00) West Central Africa", @@ -3658,7 +3513,7 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { { "Syria Standard Time", -120, TRUE, "(UTC+02:00) Damascus", "Syria Standard Time", "Syria Daylight Time", TimeZoneRuleTable_60, 17 }, { "West Bank Standard Time", -120, TRUE, "(UTC+02:00) Gaza, Hebron", - "West Bank Gaza Standard Time", "West Bank Gaza Daylight Time", TimeZoneRuleTable_61, 7 }, + "West Bank Gaza Standard Time", "West Bank Gaza Daylight Time", TimeZoneRuleTable_61, 9 }, { "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", @@ -3681,7 +3536,7 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { "Arab Daylight Time", NULL, 0 }, { "Belarus Standard Time", -180, TRUE, "(UTC+03:00) Minsk", "Belarus Standard Time", "Belarus Daylight Time", TimeZoneRuleTable_72, 2 }, - { "Russian Standard Time", -180, TRUE, "(UTC+03:00) Moscow, St. Petersburg, Volgograd", + { "Russian Standard Time", -180, TRUE, "(UTC+03:00) Moscow, St. Petersburg", "Russia TZ 2 Standard Time", "Russia TZ 2 Daylight Time", TimeZoneRuleTable_73, 5 }, { "E. Africa Standard Time", -180, FALSE, "(UTC+03:00) Nairobi", "E. Africa Standard Time", "E. Africa Daylight Time", NULL, 0 }, @@ -3701,16 +3556,20 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { "Saratov Daylight Time", TimeZoneRuleTable_81, 5 }, { "Georgian Standard Time", -240, FALSE, "(UTC+04:00) Tbilisi", "Georgian Standard Time", "Georgian Daylight Time", NULL, 0 }, + { "Volgograd Standard Time", -240, TRUE, "(UTC+04:00) Volgograd", "Volgograd Standard Time", + "Volgograd Daylight Time", TimeZoneRuleTable_83, 7 }, { "Caucasus Standard Time", -240, TRUE, "(UTC+04:00) Yerevan", "Caucasus Standard Time", - "Caucasus Daylight Time", TimeZoneRuleTable_83, 1 }, + "Caucasus Daylight Time", TimeZoneRuleTable_84, 1 }, { "Afghanistan Standard Time", -270, FALSE, "(UTC+04:30) Kabul", "Afghanistan Standard Time", "Afghanistan Daylight Time", NULL, 0 }, { "West Asia Standard Time", -300, FALSE, "(UTC+05:00) Ashgabat, Tashkent", "West Asia Standard Time", "West Asia Daylight Time", NULL, 0 }, { "Ekaterinburg Standard Time", -300, TRUE, "(UTC+05:00) Ekaterinburg", - "Russia TZ 4 Standard Time", "Russia TZ 4 Daylight Time", TimeZoneRuleTable_86, 5 }, + "Russia TZ 4 Standard Time", "Russia TZ 4 Daylight Time", TimeZoneRuleTable_87, 5 }, { "Pakistan Standard Time", -300, TRUE, "(UTC+05:00) Islamabad, Karachi", - "Pakistan Standard Time", "Pakistan Daylight Time", TimeZoneRuleTable_87, 2 }, + "Pakistan Standard Time", "Pakistan Daylight Time", TimeZoneRuleTable_88, 2 }, + { "Qyzylorda Standard Time", -300, TRUE, "(UTC+05:00) Qyzylorda", "Qyzylorda Standard Time", + "Qyzylorda Daylight Time", TimeZoneRuleTable_89, 2 }, { "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", @@ -3720,93 +3579,93 @@ const TIME_ZONE_ENTRY TimeZoneTable[] = { { "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", TimeZoneRuleTable_92, 1 }, + "Bangladesh Daylight Time", TimeZoneRuleTable_94, 1 }, { "Omsk Standard Time", -360, TRUE, "(UTC+06:00) Omsk", "Omsk Standard Time", - "Omsk Daylight Time", TimeZoneRuleTable_93, 5 }, + "Omsk Daylight Time", TimeZoneRuleTable_95, 5 }, { "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 }, { "Altai Standard Time", -420, TRUE, "(UTC+07:00) Barnaul, Gorno-Altaysk", - "Altai Standard Time", "Altai Daylight Time", TimeZoneRuleTable_96, 5 }, + "Altai Standard Time", "Altai Daylight Time", TimeZoneRuleTable_98, 5 }, { "W. Mongolia Standard Time", -420, TRUE, "(UTC+07:00) Hovd", "W. Mongolia Standard Time", - "W. Mongolia Daylight Time", TimeZoneRuleTable_97, 3 }, + "W. Mongolia Daylight Time", TimeZoneRuleTable_99, 3 }, { "North Asia Standard Time", -420, TRUE, "(UTC+07:00) Krasnoyarsk", - "Russia TZ 6 Standard Time", "Russia TZ 6 Daylight Time", TimeZoneRuleTable_98, 5 }, + "Russia TZ 6 Standard Time", "Russia TZ 6 Daylight Time", TimeZoneRuleTable_100, 5 }, { "N. Central Asia Standard Time", -420, TRUE, "(UTC+07:00) Novosibirsk", - "Novosibirsk Standard Time", "Novosibirsk Daylight Time", TimeZoneRuleTable_99, 5 }, + "Novosibirsk Standard Time", "Novosibirsk Daylight Time", TimeZoneRuleTable_101, 5 }, { "Tomsk Standard Time", -420, TRUE, "(UTC+07:00) Tomsk", "Tomsk Standard Time", - "Tomsk Daylight Time", TimeZoneRuleTable_100, 5 }, + "Tomsk Daylight Time", TimeZoneRuleTable_102, 5 }, { "China Standard Time", -480, FALSE, "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "China Standard Time", "China Daylight Time", NULL, 0 }, { "North Asia East Standard Time", -480, TRUE, "(UTC+08:00) Irkutsk", - "Russia TZ 7 Standard Time", "Russia TZ 7 Daylight Time", TimeZoneRuleTable_102, 5 }, + "Russia TZ 7 Standard Time", "Russia TZ 7 Daylight Time", TimeZoneRuleTable_104, 5 }, { "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", TimeZoneRuleTable_104, 4 }, + "W. Australia Daylight Time", TimeZoneRuleTable_106, 4 }, { "Taipei Standard Time", -480, FALSE, "(UTC+08:00) Taipei", "Taipei Standard Time", "Taipei Daylight Time", NULL, 0 }, { "Ulaanbaatar Standard Time", -480, TRUE, "(UTC+08:00) Ulaanbaatar", - "Ulaanbaatar Standard Time", "Ulaanbaatar Daylight Time", TimeZoneRuleTable_106, 2 }, + "Ulaanbaatar Standard Time", "Ulaanbaatar Daylight Time", TimeZoneRuleTable_108, 2 }, { "Aus Central W. Standard Time", -525, FALSE, "(UTC+08:45) Eucla", "Aus Central W. Standard Time", "Aus Central W. Daylight Time", NULL, 0 }, { "Transbaikal Standard Time", -540, TRUE, "(UTC+09:00) Chita", "Transbaikal Standard Time", - "Transbaikal Daylight Time", TimeZoneRuleTable_108, 7 }, + "Transbaikal Daylight Time", TimeZoneRuleTable_110, 7 }, { "Tokyo Standard Time", -540, FALSE, "(UTC+09:00) Osaka, Sapporo, Tokyo", "Tokyo Standard Time", "Tokyo Daylight Time", NULL, 0 }, { "North Korea Standard Time", -540, TRUE, "(UTC+09:00) Pyongyang", "North Korea Standard Time", - "North Korea Daylight Time", TimeZoneRuleTable_110, 4 }, + "North Korea Daylight Time", TimeZoneRuleTable_112, 4 }, { "Korea Standard Time", -540, FALSE, "(UTC+09:00) Seoul", "Korea Standard Time", "Korea Daylight Time", NULL, 0 }, { "Yakutsk Standard Time", -540, TRUE, "(UTC+09:00) Yakutsk", "Russia TZ 8 Standard Time", - "Russia TZ 8 Daylight Time", TimeZoneRuleTable_112, 5 }, + "Russia TZ 8 Daylight Time", TimeZoneRuleTable_114, 5 }, { "Cen. Australia Standard Time", -570, TRUE, "(UTC+09:30) Adelaide", - "Cen. Australia Standard Time", "Cen. Australia Daylight Time", TimeZoneRuleTable_113, 2 }, + "Cen. Australia Standard Time", "Cen. Australia Daylight Time", TimeZoneRuleTable_115, 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", TimeZoneRuleTable_116, 2 }, + "AUS Eastern Standard Time", "AUS Eastern Daylight Time", TimeZoneRuleTable_118, 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", TimeZoneRuleTable_118, 2 }, + "Tasmania Daylight Time", TimeZoneRuleTable_120, 2 }, { "Vladivostok Standard Time", -600, TRUE, "(UTC+10:00) Vladivostok", - "Russia TZ 9 Standard Time", "Russia TZ 9 Daylight Time", TimeZoneRuleTable_119, 5 }, + "Russia TZ 9 Standard Time", "Russia TZ 9 Daylight Time", TimeZoneRuleTable_121, 5 }, { "Lord Howe Standard Time", -630, TRUE, "(UTC+10:30) Lord Howe Island", - "Lord Howe Standard Time", "Lord Howe Daylight Time", TimeZoneRuleTable_120, 4 }, + "Lord Howe Standard Time", "Lord Howe Daylight Time", TimeZoneRuleTable_122, 4 }, { "Bougainville Standard Time", -660, TRUE, "(UTC+11:00) Bougainville Island", - "Bougainville Standard Time", "Bougainville Daylight Time", TimeZoneRuleTable_121, 2 }, + "Bougainville Standard Time", "Bougainville Daylight Time", TimeZoneRuleTable_123, 2 }, { "Russia Time Zone 10", -660, TRUE, "(UTC+11:00) Chokurdakh", "Russia TZ 10 Standard Time", - "Russia TZ 10 Daylight Time", TimeZoneRuleTable_122, 5 }, + "Russia TZ 10 Daylight Time", TimeZoneRuleTable_124, 5 }, { "Magadan Standard Time", -660, TRUE, "(UTC+11:00) Magadan", "Magadan Standard Time", - "Magadan Daylight Time", TimeZoneRuleTable_123, 7 }, + "Magadan Daylight Time", TimeZoneRuleTable_125, 7 }, { "Norfolk Standard Time", -660, TRUE, "(UTC+11:00) Norfolk Island", "Norfolk Standard Time", - "Norfolk Daylight Time", TimeZoneRuleTable_124, 2 }, + "Norfolk Daylight Time", TimeZoneRuleTable_126, 4 }, { "Sakhalin Standard Time", -660, TRUE, "(UTC+11:00) Sakhalin", "Sakhalin Standard Time", - "Sakhalin Daylight Time", TimeZoneRuleTable_125, 5 }, + "Sakhalin Daylight Time", TimeZoneRuleTable_127, 5 }, { "Central Pacific Standard Time", -660, FALSE, "(UTC+11:00) Solomon Is., New Caledonia", "Central Pacific Standard Time", "Central Pacific Daylight Time", NULL, 0 }, { "Russia Time Zone 11", -720, TRUE, "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky", - "Russia TZ 11 Standard Time", "Russia TZ 11 Daylight Time", TimeZoneRuleTable_127, 3 }, + "Russia TZ 11 Standard Time", "Russia TZ 11 Daylight Time", TimeZoneRuleTable_129, 3 }, { "New Zealand Standard Time", -720, TRUE, "(UTC+12:00) Auckland, Wellington", - "New Zealand Standard Time", "New Zealand Daylight Time", TimeZoneRuleTable_128, 3 }, + "New Zealand Standard Time", "New Zealand Daylight Time", TimeZoneRuleTable_130, 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", TimeZoneRuleTable_130, 11 }, + "Fiji Daylight Time", TimeZoneRuleTable_132, 12 }, { "Kamchatka Standard Time", -720, TRUE, "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", - "Kamchatka Standard Time", "Kamchatka Daylight Time", TimeZoneRuleTable_131, 1 }, + "Kamchatka Standard Time", "Kamchatka Daylight Time", TimeZoneRuleTable_133, 1 }, { "Chatham Islands Standard Time", -765, TRUE, "(UTC+12:45) Chatham Islands", - "Chatham Islands Standard Time", "Chatham Islands Daylight Time", TimeZoneRuleTable_132, 3 }, + "Chatham Islands Standard Time", "Chatham Islands Daylight Time", TimeZoneRuleTable_134, 3 }, { "UTC+13", -780, FALSE, "(UTC+13:00) Coordinated Universal Time+13", "UTC+13", "UTC+13", NULL, 0 }, { "Tonga Standard Time", -780, TRUE, "(UTC+13:00) Nuku'alofa", "Tonga Standard Time", - "Tonga Daylight Time", TimeZoneRuleTable_134, 2 }, + "Tonga Daylight Time", TimeZoneRuleTable_136, 2 }, { "Samoa Standard Time", -780, TRUE, "(UTC+13:00) Samoa", "Samoa Standard Time", - "Samoa Daylight Time", TimeZoneRuleTable_135, 4 }, + "Samoa Daylight Time", TimeZoneRuleTable_137, 4 }, { "Line Islands Standard Time", -840, FALSE, "(UTC+14:00) Kiritimati Island", "Line Islands Standard Time", "Line Islands Daylight Time", NULL, 0 } };