From 4c2380d396326bc76ccf4c640d91e26d48b4fe30 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 5 Dec 2014 13:41:52 +0000 Subject: [PATCH] * Makefile.in: Add rules to create and depend on tzmap.h. * tzmap-from-unicode.org: New script to create tzmap.h. * tzmap.h: New auto-generated file. * tzset.c: Drop tzmap from here and include tzmap.h instead. Drop Windows 2000 considerations. --- winsup/utils/ChangeLog | 8 + winsup/utils/Makefile.in | 9 + winsup/utils/tzmap-from-unicode.org | 85 +++++ winsup/utils/tzmap.h | 514 ++++++++++++++++++++++++++++ winsup/utils/tzset.c | 500 +-------------------------- 5 files changed, 627 insertions(+), 489 deletions(-) create mode 100755 winsup/utils/tzmap-from-unicode.org create mode 100644 winsup/utils/tzmap.h diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 83953c601..e58273000 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,11 @@ +2014-12-05 Corinna Vinschen + + * Makefile.in: Add rules to create and depend on tzmap.h. + * tzmap-from-unicode.org: New script to create tzmap.h. + * tzmap.h: New auto-generated file. + * tzset.c: Drop tzmap from here and include tzmap.h instead. Drop + Windows 2000 considerations. + 2014-11-28 Corinna Vinschen * mkgroup.c (main): Call enum_local_groups with offset 0x30000 for local diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in index 28d730652..fe81d878e 100644 --- a/winsup/utils/Makefile.in +++ b/winsup/utils/Makefile.in @@ -84,6 +84,15 @@ path-mount.o: path.cc ${COMPILE.cc} -c -DFSTAB_ONLY -o $@ $< mount.exe: path-mount.o +.PHONY: tzmap +tzmap: + ${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@.h + +tzmap.h: + [ -f "${srcdir}/tzmap.h" ] || ${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@ + +tzset.o: tzmap.h + # Provide any necessary per-target variable overrides. cygcheck.exe: MINGW_LDFLAGS += ${ZLIB} -lwininet -lpsapi -lntdll diff --git a/winsup/utils/tzmap-from-unicode.org b/winsup/utils/tzmap-from-unicode.org new file mode 100755 index 000000000..9e713c3b2 --- /dev/null +++ b/winsup/utils/tzmap-from-unicode.org @@ -0,0 +1,85 @@ +#!/bin/bash +# +# tzset-from-unicode.org +# +# Fetch XML file containing mapping of Windows timezone keynames and countries +# per ISO 3166-1 to POSIX timezones from unicode.org. +# +# Create the table file as required by tzset.c. +# + +ZONES_FILE="http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml" + +echo "/*" +echo " This file gets auto-generated by the script tzmap-from-unicode.org via" +echo " a Makefile rule. To regenerate the file, just call 'make tzmap'. It" +echo " fetches the file" +echo "" +echo " ${ZONES_FILE}" +echo "" +echo " using wget and converts it into the tzmap table required by tzget.c." +echo " Regenerating might be necessary on a regular basis..." +echo "" +echo " This table maps Windows timezone keynames and countries per ISO 3166-1 to" +echo " POSIX-compatible timezone IDs." +echo "" +echo " The mapping from unicode.org is just a bit incomplete. It doesn't contain" +echo " a few timezones available on Windows XP, namely:" +echo "" +echo " Armenian Standard Time" +echo " Mexico Standard Time" +echo " Mexico Standard Time 2" +echo "" +echo " as well as the still (Windows 8.1) available" +echo "" +echo " E. Europe Standard Time" +echo " Mid-Atlantic Standard Time" +echo " Kamchatka Standard Time" +echo "" +echo " as well as a few combinations which got a new Windows timezone name" +echo "" +echo " Eastern Standard Time/TC" +echo " Egypt Standard Time/PS" +echo " Greenwich Standard Time/EH" +echo " Hawaiian Standard Time/TK" +echo " Kaliningrad Standard Time/BY" +echo " SA Pacific Standard Time/HT " +echo " South Africa Standard Time/LY" +echo "" +echo " It also doesn't contain some of the deprecated country codes used in older" +echo " OSes, namely:" +echo "" +echo " SP (Serbian, proposed) used in XP" +echo " CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista" +echo " " +echo " While these are apparently old, they are required here to get a complete" +echo " mapping on all supported OSes. */" +echo "struct" +echo "{" +echo " PCWSTR win_tzkey;" +echo " PCWSTR country;" +echo " PCWSTR posix_tzid;" +echo "} tzmap[] =" +echo "{" +wget -O - "${ZONES_FILE}" | \ +{ + sed -n -e 's#territory="001"#territory=""# + s#.*mapZone other=\("[^"]*"\) territory=\("[^"]*"\) type=\("[^"]*"\).*# { L\1, L\2, L\3 },#p' + echo ' { L"Armenian Standard Time", L"AM", L"Asia/Yerevan" },' + echo ' { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" },' + echo ' { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" },' + echo ' { L"E. Europe Standard Time", L"", L"Asia/Nicosia" },' + echo ' { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" },' + echo ' { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" },' + echo ' { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" },' + echo ' { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" },' + echo ' { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" },' + echo ' { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" },' + echo ' { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" },' + echo ' { L"Mexico Standard Time", L"", L"America/Mexico_City" },' + echo ' { L"Mexico Standard Time 2", L"", L"America/Mazatlan" },' + echo ' { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" },' + echo ' { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" },' + echo ' { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" },' +} | sort -d +echo "};" diff --git a/winsup/utils/tzmap.h b/winsup/utils/tzmap.h new file mode 100644 index 000000000..d63d506c3 --- /dev/null +++ b/winsup/utils/tzmap.h @@ -0,0 +1,514 @@ +/* + This file gets auto-generated by the script tzmap-from-unicode.org via + a Makefile rule. To regenerate the file, just call 'make tzmap'. It + fetches the file + + http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml + + using wget and converts it into the tzmap table required by tzget.c. + Regenerating might be necessary on a regular basis... + + This table maps Windows timezone keynames and countries per ISO 3166-1 to + POSIX-compatible timezone IDs. + + The mapping from unicode.org is just a bit incomplete. It doesn't contain + a few timezones available on Windows XP, namely: + + Armenian Standard Time + Mexico Standard Time + Mexico Standard Time 2 + + as well as the still (Windows 8.1) available + + E. Europe Standard Time + Mid-Atlantic Standard Time + Kamchatka Standard Time + + as well as a few combinations which got a new Windows timezone name + + Eastern Standard Time/TC + Egypt Standard Time/PS + Greenwich Standard Time/EH + Hawaiian Standard Time/TK + Kaliningrad Standard Time/BY + SA Pacific Standard Time/HT + South Africa Standard Time/LY + + It also doesn't contain some of the deprecated country codes used in older + OSes, namely: + + SP (Serbian, proposed) used in XP + CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista + + While these are apparently old, they are required here to get a complete + mapping on all supported OSes. */ +struct +{ + PCWSTR win_tzkey; + PCWSTR country; + PCWSTR posix_tzid; +} tzmap[] = +{ + { L"AUS Central Standard Time", L"", L"Australia/Darwin" }, + { L"AUS Central Standard Time", L"AU", L"Australia/Darwin" }, + { L"AUS Eastern Standard Time", L"", L"Australia/Sydney" }, + { L"AUS Eastern Standard Time", L"AU", L"Australia/Sydney Australia/Melbourne" }, + { L"Afghanistan Standard Time", L"", L"Asia/Kabul" }, + { L"Afghanistan Standard Time", L"AF", L"Asia/Kabul" }, + { L"Alaskan Standard Time", L"", L"America/Anchorage" }, + { L"Alaskan Standard Time", L"US", L"America/Anchorage America/Juneau America/Nome America/Sitka America/Yakutat" }, + { L"Arab Standard Time", L"", L"Asia/Riyadh" }, + { L"Arab Standard Time", L"BH", L"Asia/Bahrain" }, + { L"Arab Standard Time", L"KW", L"Asia/Kuwait" }, + { L"Arab Standard Time", L"QA", L"Asia/Qatar" }, + { L"Arab Standard Time", L"SA", L"Asia/Riyadh" }, + { L"Arab Standard Time", L"YE", L"Asia/Aden" }, + { L"Arabian Standard Time", L"", L"Asia/Dubai" }, + { L"Arabian Standard Time", L"AE", L"Asia/Dubai" }, + { L"Arabian Standard Time", L"OM", L"Asia/Muscat" }, + { L"Arabian Standard Time", L"ZZ", L"Etc/GMT-4" }, + { L"Arabic Standard Time", L"", L"Asia/Baghdad" }, + { L"Arabic Standard Time", L"IQ", L"Asia/Baghdad" }, + { L"Argentina Standard Time", L"", L"America/Buenos_Aires" }, + { L"Argentina Standard Time", L"AR", L"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" }, + { L"Armenian Standard Time", L"AM", L"Asia/Yerevan" }, + { L"Atlantic Standard Time", L"", L"America/Halifax" }, + { L"Atlantic Standard Time", L"BM", L"Atlantic/Bermuda" }, + { L"Atlantic Standard Time", L"CA", L"America/Halifax America/Glace_Bay America/Goose_Bay America/Moncton" }, + { L"Atlantic Standard Time", L"GL", L"America/Thule" }, + { L"Azerbaijan Standard Time", L"", L"Asia/Baku" }, + { L"Azerbaijan Standard Time", L"AZ", L"Asia/Baku" }, + { L"Azores Standard Time", L"", L"Atlantic/Azores" }, + { L"Azores Standard Time", L"GL", L"America/Scoresbysund" }, + { L"Azores Standard Time", L"PT", L"Atlantic/Azores" }, + { L"Bahia Standard Time", L"", L"America/Bahia" }, + { L"Bahia Standard Time", L"BR", L"America/Bahia" }, + { L"Bangladesh Standard Time", L"", L"Asia/Dhaka" }, + { L"Bangladesh Standard Time", L"BD", L"Asia/Dhaka" }, + { L"Bangladesh Standard Time", L"BT", L"Asia/Thimphu" }, + { L"Belarus Standard Time", L"", L"Europe/Minsk" }, + { L"Belarus Standard Time", L"BY", L"Europe/Minsk" }, + { L"Canada Central Standard Time", L"", L"America/Regina" }, + { L"Canada Central Standard Time", L"CA", L"America/Regina America/Swift_Current" }, + { L"Cape Verde Standard Time", L"", L"Atlantic/Cape_Verde" }, + { L"Cape Verde Standard Time", L"CV", L"Atlantic/Cape_Verde" }, + { L"Cape Verde Standard Time", L"ZZ", L"Etc/GMT+1" }, + { L"Caucasus Standard Time", L"", L"Asia/Yerevan" }, + { L"Caucasus Standard Time", L"AM", L"Asia/Yerevan" }, + { L"Cen. Australia Standard Time", L"", L"Australia/Adelaide" }, + { L"Cen. Australia Standard Time", L"AU", L"Australia/Adelaide Australia/Broken_Hill" }, + { L"Central America Standard Time", L"", L"America/Guatemala" }, + { L"Central America Standard Time", L"BZ", L"America/Belize" }, + { L"Central America Standard Time", L"CR", L"America/Costa_Rica" }, + { L"Central America Standard Time", L"EC", L"Pacific/Galapagos" }, + { L"Central America Standard Time", L"GT", L"America/Guatemala" }, + { L"Central America Standard Time", L"HN", L"America/Tegucigalpa" }, + { L"Central America Standard Time", L"NI", L"America/Managua" }, + { L"Central America Standard Time", L"SV", L"America/El_Salvador" }, + { L"Central America Standard Time", L"ZZ", L"Etc/GMT+6" }, + { L"Central Asia Standard Time", L"", L"Asia/Almaty" }, + { L"Central Asia Standard Time", L"AQ", L"Antarctica/Vostok" }, + { L"Central Asia Standard Time", L"CN", L"Asia/Urumqi" }, + { L"Central Asia Standard Time", L"IO", L"Indian/Chagos" }, + { L"Central Asia Standard Time", L"KG", L"Asia/Bishkek" }, + { L"Central Asia Standard Time", L"KZ", L"Asia/Almaty Asia/Qyzylorda" }, + { L"Central Asia Standard Time", L"ZZ", L"Etc/GMT-6" }, + { L"Central Brazilian Standard Time", L"", L"America/Cuiaba" }, + { L"Central Brazilian Standard Time", L"BR", L"America/Cuiaba America/Campo_Grande" }, + { L"Central Europe Standard Time", L"", L"Europe/Budapest" }, + { L"Central Europe Standard Time", L"AL", L"Europe/Tirane" }, + { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" }, + { L"Central Europe Standard Time", L"CZ", L"Europe/Prague" }, + { L"Central Europe Standard Time", L"HU", L"Europe/Budapest" }, + { L"Central Europe Standard Time", L"ME", L"Europe/Podgorica" }, + { L"Central Europe Standard Time", L"RS", L"Europe/Belgrade" }, + { L"Central Europe Standard Time", L"SI", L"Europe/Ljubljana" }, + { L"Central Europe Standard Time", L"SK", L"Europe/Bratislava" }, + { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" }, + { L"Central European Standard Time", L"", L"Europe/Warsaw" }, + { L"Central European Standard Time", L"BA", L"Europe/Sarajevo" }, + { L"Central European Standard Time", L"HR", L"Europe/Zagreb" }, + { L"Central European Standard Time", L"MK", L"Europe/Skopje" }, + { L"Central European Standard Time", L"PL", L"Europe/Warsaw" }, + { L"Central Pacific Standard Time", L"", L"Pacific/Guadalcanal" }, + { L"Central Pacific Standard Time", L"AU", L"Antarctica/Macquarie" }, + { L"Central Pacific Standard Time", L"FM", L"Pacific/Ponape Pacific/Kosrae" }, + { L"Central Pacific Standard Time", L"NC", L"Pacific/Noumea" }, + { L"Central Pacific Standard Time", L"SB", L"Pacific/Guadalcanal" }, + { L"Central Pacific Standard Time", L"VU", L"Pacific/Efate" }, + { L"Central Pacific Standard Time", L"ZZ", L"Etc/GMT-11" }, + { L"Central Standard Time", L"", L"America/Chicago" }, + { L"Central Standard Time", L"CA", L"America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute" }, + { L"Central Standard Time", L"MX", L"America/Matamoros" }, + { L"Central Standard Time", L"US", L"America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem" }, + { L"Central Standard Time", L"ZZ", L"CST6CDT" }, + { L"Central Standard Time (Mexico)", L"", L"America/Mexico_City" }, + { L"Central Standard Time (Mexico)", L"MX", L"America/Mexico_City America/Bahia_Banderas America/Cancun America/Merida America/Monterrey" }, + { L"China Standard Time", L"", L"Asia/Shanghai" }, + { L"China Standard Time", L"CN", L"Asia/Shanghai" }, + { L"China Standard Time", L"HK", L"Asia/Hong_Kong" }, + { L"China Standard Time", L"MO", L"Asia/Macau" }, + { L"Dateline Standard Time", L"", L"Etc/GMT+12" }, + { L"Dateline Standard Time", L"ZZ", L"Etc/GMT+12" }, + { L"E. Africa Standard Time", L"", L"Africa/Nairobi" }, + { L"E. Africa Standard Time", L"AQ", L"Antarctica/Syowa" }, + { L"E. Africa Standard Time", L"DJ", L"Africa/Djibouti" }, + { L"E. Africa Standard Time", L"ER", L"Africa/Asmera" }, + { L"E. Africa Standard Time", L"ET", L"Africa/Addis_Ababa" }, + { L"E. Africa Standard Time", L"KE", L"Africa/Nairobi" }, + { L"E. Africa Standard Time", L"KM", L"Indian/Comoro" }, + { L"E. Africa Standard Time", L"MG", L"Indian/Antananarivo" }, + { L"E. Africa Standard Time", L"SD", L"Africa/Khartoum" }, + { L"E. Africa Standard Time", L"SO", L"Africa/Mogadishu" }, + { L"E. Africa Standard Time", L"SS", L"Africa/Juba" }, + { L"E. Africa Standard Time", L"TZ", L"Africa/Dar_es_Salaam" }, + { L"E. Africa Standard Time", L"UG", L"Africa/Kampala" }, + { L"E. Africa Standard Time", L"YT", L"Indian/Mayotte" }, + { L"E. Africa Standard Time", L"ZZ", L"Etc/GMT-3" }, + { L"E. Australia Standard Time", L"", L"Australia/Brisbane" }, + { L"E. Australia Standard Time", L"AU", L"Australia/Brisbane Australia/Lindeman" }, + { L"E. Europe Standard Time", L"", L"Asia/Nicosia" }, + { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" }, + { L"E. South America Standard Time", L"", L"America/Sao_Paulo" }, + { L"E. South America Standard Time", L"BR", L"America/Sao_Paulo" }, + { L"Eastern Standard Time", L"", L"America/New_York" }, + { L"Eastern Standard Time", L"BS", L"America/Nassau" }, + { L"Eastern Standard Time", L"CA", L"America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay" }, + { L"Eastern Standard Time", L"CU", L"America/Havana" }, + { L"Eastern Standard Time", L"HT", L"America/Port-au-Prince" }, + { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" }, + { L"Eastern Standard Time", L"US", L"America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, + { L"Eastern Standard Time", L"ZZ", L"EST5EDT" }, + { L"Egypt Standard Time", L"", L"Africa/Cairo" }, + { L"Egypt Standard Time", L"EG", L"Africa/Cairo" }, + { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" }, + { L"Ekaterinburg Standard Time", L"", L"Asia/Yekaterinburg" }, + { L"Ekaterinburg Standard Time", L"RU", L"Asia/Yekaterinburg" }, + { L"FLE Standard Time", L"", L"Europe/Kiev" }, + { L"FLE Standard Time", L"AX", L"Europe/Mariehamn" }, + { L"FLE Standard Time", L"BG", L"Europe/Sofia" }, + { L"FLE Standard Time", L"EE", L"Europe/Tallinn" }, + { L"FLE Standard Time", L"FI", L"Europe/Helsinki" }, + { L"FLE Standard Time", L"LT", L"Europe/Vilnius" }, + { L"FLE Standard Time", L"LV", L"Europe/Riga" }, + { L"FLE Standard Time", L"UA", L"Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye" }, + { L"Fiji Standard Time", L"", L"Pacific/Fiji" }, + { L"Fiji Standard Time", L"FJ", L"Pacific/Fiji" }, + { L"GMT Standard Time", L"", L"Europe/London" }, + { L"GMT Standard Time", L"ES", L"Atlantic/Canary" }, + { L"GMT Standard Time", L"FO", L"Atlantic/Faeroe" }, + { L"GMT Standard Time", L"GB", L"Europe/London" }, + { L"GMT Standard Time", L"GG", L"Europe/Guernsey" }, + { L"GMT Standard Time", L"IE", L"Europe/Dublin" }, + { L"GMT Standard Time", L"IM", L"Europe/Isle_of_Man" }, + { L"GMT Standard Time", L"JE", L"Europe/Jersey" }, + { L"GMT Standard Time", L"PT", L"Europe/Lisbon Atlantic/Madeira" }, + { L"GTB Standard Time", L"", L"Europe/Bucharest" }, + { L"GTB Standard Time", L"CY", L"Asia/Nicosia" }, + { L"GTB Standard Time", L"GR", L"Europe/Athens" }, + { L"GTB Standard Time", L"MD", L"Europe/Chisinau" }, + { L"GTB Standard Time", L"RO", L"Europe/Bucharest" }, + { L"Georgian Standard Time", L"", L"Asia/Tbilisi" }, + { L"Georgian Standard Time", L"GE", L"Asia/Tbilisi" }, + { L"Greenland Standard Time", L"", L"America/Godthab" }, + { L"Greenland Standard Time", L"GL", L"America/Godthab" }, + { L"Greenwich Standard Time", L"", L"Atlantic/Reykjavik" }, + { L"Greenwich Standard Time", L"BF", L"Africa/Ouagadougou" }, + { L"Greenwich Standard Time", L"CI", L"Africa/Abidjan" }, + { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" }, + { L"Greenwich Standard Time", L"GH", L"Africa/Accra" }, + { L"Greenwich Standard Time", L"GM", L"Africa/Banjul" }, + { L"Greenwich Standard Time", L"GN", L"Africa/Conakry" }, + { L"Greenwich Standard Time", L"GW", L"Africa/Bissau" }, + { L"Greenwich Standard Time", L"IS", L"Atlantic/Reykjavik" }, + { L"Greenwich Standard Time", L"LR", L"Africa/Monrovia" }, + { L"Greenwich Standard Time", L"ML", L"Africa/Bamako" }, + { L"Greenwich Standard Time", L"MR", L"Africa/Nouakchott" }, + { L"Greenwich Standard Time", L"SH", L"Atlantic/St_Helena" }, + { L"Greenwich Standard Time", L"SL", L"Africa/Freetown" }, + { L"Greenwich Standard Time", L"SN", L"Africa/Dakar" }, + { L"Greenwich Standard Time", L"ST", L"Africa/Sao_Tome" }, + { L"Greenwich Standard Time", L"TG", L"Africa/Lome" }, + { L"Hawaiian Standard Time", L"", L"Pacific/Honolulu" }, + { L"Hawaiian Standard Time", L"CK", L"Pacific/Rarotonga" }, + { L"Hawaiian Standard Time", L"PF", L"Pacific/Tahiti" }, + { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" }, + { L"Hawaiian Standard Time", L"UM", L"Pacific/Johnston" }, + { L"Hawaiian Standard Time", L"US", L"Pacific/Honolulu" }, + { L"Hawaiian Standard Time", L"ZZ", L"Etc/GMT+10" }, + { L"India Standard Time", L"", L"Asia/Calcutta" }, + { L"India Standard Time", L"IN", L"Asia/Calcutta" }, + { L"Iran Standard Time", L"", L"Asia/Tehran" }, + { L"Iran Standard Time", L"IR", L"Asia/Tehran" }, + { L"Israel Standard Time", L"", L"Asia/Jerusalem" }, + { L"Israel Standard Time", L"IL", L"Asia/Jerusalem" }, + { L"Jordan Standard Time", L"", L"Asia/Amman" }, + { L"Jordan Standard Time", L"JO", L"Asia/Amman" }, + { L"Kaliningrad Standard Time", L"", L"Europe/Kaliningrad" }, + { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" }, + { L"Kaliningrad Standard Time", L"RU", L"Europe/Kaliningrad" }, + { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" }, + { L"Korea Standard Time", L"", L"Asia/Seoul" }, + { L"Korea Standard Time", L"KP", L"Asia/Pyongyang" }, + { L"Korea Standard Time", L"KR", L"Asia/Seoul" }, + { L"Libya Standard Time", L"", L"Africa/Tripoli" }, + { L"Libya Standard Time", L"LY", L"Africa/Tripoli" }, + { L"Line Islands Standard Time", L"", L"Pacific/Kiritimati" }, + { L"Line Islands Standard Time", L"KI", L"Pacific/Kiritimati" }, + { L"Line Islands Standard Time", L"ZZ", L"Etc/GMT-14" }, + { L"Magadan Standard Time", L"", L"Asia/Magadan" }, + { L"Magadan Standard Time", L"RU", L"Asia/Magadan" }, + { L"Mauritius Standard Time", L"", L"Indian/Mauritius" }, + { L"Mauritius Standard Time", L"MU", L"Indian/Mauritius" }, + { L"Mauritius Standard Time", L"RE", L"Indian/Reunion" }, + { L"Mauritius Standard Time", L"SC", L"Indian/Mahe" }, + { L"Mexico Standard Time 2", L"", L"America/Mazatlan" }, + { L"Mexico Standard Time", L"", L"America/Mexico_City" }, + { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" }, + { L"Middle East Standard Time", L"", L"Asia/Beirut" }, + { L"Middle East Standard Time", L"LB", L"Asia/Beirut" }, + { L"Montevideo Standard Time", L"", L"America/Montevideo" }, + { L"Montevideo Standard Time", L"UY", L"America/Montevideo" }, + { L"Morocco Standard Time", L"", L"Africa/Casablanca" }, + { L"Morocco Standard Time", L"EH", L"Africa/El_Aaiun" }, + { L"Morocco Standard Time", L"MA", L"Africa/Casablanca" }, + { L"Mountain Standard Time", L"", L"America/Denver" }, + { L"Mountain Standard Time", L"CA", L"America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife" }, + { L"Mountain Standard Time", L"MX", L"America/Ojinaga" }, + { L"Mountain Standard Time", L"US", L"America/Denver America/Boise" }, + { L"Mountain Standard Time", L"ZZ", L"MST7MDT" }, + { L"Mountain Standard Time (Mexico)", L"", L"America/Chihuahua" }, + { L"Mountain Standard Time (Mexico)", L"MX", L"America/Chihuahua America/Mazatlan" }, + { L"Myanmar Standard Time", L"", L"Asia/Rangoon" }, + { L"Myanmar Standard Time", L"CC", L"Indian/Cocos" }, + { L"Myanmar Standard Time", L"MM", L"Asia/Rangoon" }, + { L"N. Central Asia Standard Time", L"", L"Asia/Novosibirsk" }, + { L"N. Central Asia Standard Time", L"RU", L"Asia/Novosibirsk Asia/Omsk" }, + { L"Namibia Standard Time", L"", L"Africa/Windhoek" }, + { L"Namibia Standard Time", L"NA", L"Africa/Windhoek" }, + { L"Nepal Standard Time", L"", L"Asia/Katmandu" }, + { L"Nepal Standard Time", L"NP", L"Asia/Katmandu" }, + { L"New Zealand Standard Time", L"", L"Pacific/Auckland" }, + { L"New Zealand Standard Time", L"AQ", L"Antarctica/McMurdo" }, + { L"New Zealand Standard Time", L"NZ", L"Pacific/Auckland" }, + { L"Newfoundland Standard Time", L"", L"America/St_Johns" }, + { L"Newfoundland Standard Time", L"CA", L"America/St_Johns" }, + { L"North Asia East Standard Time", L"", L"Asia/Irkutsk" }, + { L"North Asia East Standard Time", L"RU", L"Asia/Irkutsk Asia/Chita" }, + { L"North Asia Standard Time", L"", L"Asia/Krasnoyarsk" }, + { L"North Asia Standard Time", L"RU", L"Asia/Krasnoyarsk Asia/Novokuznetsk" }, + { L"Pacific SA Standard Time", L"", L"America/Santiago" }, + { L"Pacific SA Standard Time", L"AQ", L"Antarctica/Palmer" }, + { L"Pacific SA Standard Time", L"CL", L"America/Santiago" }, + { L"Pacific Standard Time", L"", L"America/Los_Angeles" }, + { L"Pacific Standard Time", L"CA", L"America/Vancouver America/Dawson America/Whitehorse" }, + { L"Pacific Standard Time", L"MX", L"America/Tijuana" }, + { L"Pacific Standard Time", L"US", L"America/Los_Angeles" }, + { L"Pacific Standard Time", L"ZZ", L"PST8PDT" }, + { L"Pacific Standard Time (Mexico)", L"", L"America/Santa_Isabel" }, + { L"Pacific Standard Time (Mexico)", L"MX", L"America/Santa_Isabel" }, + { L"Pakistan Standard Time", L"", L"Asia/Karachi" }, + { L"Pakistan Standard Time", L"PK", L"Asia/Karachi" }, + { L"Paraguay Standard Time", L"", L"America/Asuncion" }, + { L"Paraguay Standard Time", L"PY", L"America/Asuncion" }, + { L"Romance Standard Time", L"", L"Europe/Paris" }, + { L"Romance Standard Time", L"BE", L"Europe/Brussels" }, + { L"Romance Standard Time", L"DK", L"Europe/Copenhagen" }, + { L"Romance Standard Time", L"ES", L"Europe/Madrid Africa/Ceuta" }, + { L"Romance Standard Time", L"FR", L"Europe/Paris" }, + { L"Russia Time Zone 10", L"", L"Asia/Srednekolymsk" }, + { L"Russia Time Zone 10", L"RU", L"Asia/Srednekolymsk" }, + { L"Russia Time Zone 11", L"", L"Asia/Kamchatka" }, + { L"Russia Time Zone 11", L"RU", L"Asia/Kamchatka Asia/Anadyr" }, + { L"Russia Time Zone 3", L"", L"Europe/Samara" }, + { L"Russia Time Zone 3", L"RU", L"Europe/Samara" }, + { L"Russian Standard Time", L"", L"Europe/Moscow" }, + { L"Russian Standard Time", L"RU", L"Europe/Moscow Europe/Simferopol Europe/Volgograd" }, + { L"SA Eastern Standard Time", L"", L"America/Cayenne" }, + { L"SA Eastern Standard Time", L"AQ", L"Antarctica/Rothera" }, + { L"SA Eastern Standard Time", L"BR", L"America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem" }, + { L"SA Eastern Standard Time", L"FK", L"Atlantic/Stanley" }, + { L"SA Eastern Standard Time", L"GF", L"America/Cayenne" }, + { L"SA Eastern Standard Time", L"SR", L"America/Paramaribo" }, + { L"SA Eastern Standard Time", L"ZZ", L"Etc/GMT+3" }, + { L"SA Pacific Standard Time", L"", L"America/Bogota" }, + { L"SA Pacific Standard Time", L"BR", L"America/Rio_Branco America/Eirunepe" }, + { L"SA Pacific Standard Time", L"CA", L"America/Coral_Harbour" }, + { L"SA Pacific Standard Time", L"CO", L"America/Bogota" }, + { L"SA Pacific Standard Time", L"EC", L"America/Guayaquil" }, + { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" }, + { L"SA Pacific Standard Time", L"JM", L"America/Jamaica" }, + { L"SA Pacific Standard Time", L"KY", L"America/Cayman" }, + { L"SA Pacific Standard Time", L"PA", L"America/Panama" }, + { L"SA Pacific Standard Time", L"PE", L"America/Lima" }, + { L"SA Pacific Standard Time", L"ZZ", L"Etc/GMT+5" }, + { L"SA Western Standard Time", L"", L"America/La_Paz" }, + { L"SA Western Standard Time", L"AG", L"America/Antigua" }, + { L"SA Western Standard Time", L"AI", L"America/Anguilla" }, + { L"SA Western Standard Time", L"AW", L"America/Aruba" }, + { L"SA Western Standard Time", L"BB", L"America/Barbados" }, + { L"SA Western Standard Time", L"BL", L"America/St_Barthelemy" }, + { L"SA Western Standard Time", L"BO", L"America/La_Paz" }, + { L"SA Western Standard Time", L"BQ", L"America/Kralendijk" }, + { L"SA Western Standard Time", L"BR", L"America/Manaus America/Boa_Vista America/Porto_Velho" }, + { L"SA Western Standard Time", L"CA", L"America/Blanc-Sablon" }, + { L"SA Western Standard Time", L"CW", L"America/Curacao" }, + { L"SA Western Standard Time", L"DM", L"America/Dominica" }, + { L"SA Western Standard Time", L"DO", L"America/Santo_Domingo" }, + { L"SA Western Standard Time", L"GD", L"America/Grenada" }, + { L"SA Western Standard Time", L"GP", L"America/Guadeloupe" }, + { L"SA Western Standard Time", L"GY", L"America/Guyana" }, + { L"SA Western Standard Time", L"KN", L"America/St_Kitts" }, + { L"SA Western Standard Time", L"LC", L"America/St_Lucia" }, + { L"SA Western Standard Time", L"MF", L"America/Marigot" }, + { L"SA Western Standard Time", L"MQ", L"America/Martinique" }, + { L"SA Western Standard Time", L"MS", L"America/Montserrat" }, + { L"SA Western Standard Time", L"PR", L"America/Puerto_Rico" }, + { L"SA Western Standard Time", L"SX", L"America/Lower_Princes" }, + { L"SA Western Standard Time", L"TC", L"America/Grand_Turk" }, + { L"SA Western Standard Time", L"TT", L"America/Port_of_Spain" }, + { L"SA Western Standard Time", L"VC", L"America/St_Vincent" }, + { L"SA Western Standard Time", L"VG", L"America/Tortola" }, + { L"SA Western Standard Time", L"VI", L"America/St_Thomas" }, + { L"SA Western Standard Time", L"ZZ", L"Etc/GMT+4" }, + { L"SE Asia Standard Time", L"", L"Asia/Bangkok" }, + { L"SE Asia Standard Time", L"AQ", L"Antarctica/Davis" }, + { L"SE Asia Standard Time", L"CX", L"Indian/Christmas" }, + { L"SE Asia Standard Time", L"ID", L"Asia/Jakarta Asia/Pontianak" }, + { L"SE Asia Standard Time", L"KH", L"Asia/Phnom_Penh" }, + { L"SE Asia Standard Time", L"LA", L"Asia/Vientiane" }, + { L"SE Asia Standard Time", L"MN", L"Asia/Hovd" }, + { L"SE Asia Standard Time", L"TH", L"Asia/Bangkok" }, + { L"SE Asia Standard Time", L"VN", L"Asia/Saigon" }, + { L"SE Asia Standard Time", L"ZZ", L"Etc/GMT-7" }, + { L"Samoa Standard Time", L"", L"Pacific/Apia" }, + { L"Samoa Standard Time", L"WS", L"Pacific/Apia" }, + { L"Singapore Standard Time", L"", L"Asia/Singapore" }, + { L"Singapore Standard Time", L"BN", L"Asia/Brunei" }, + { L"Singapore Standard Time", L"ID", L"Asia/Makassar" }, + { L"Singapore Standard Time", L"MY", L"Asia/Kuala_Lumpur Asia/Kuching" }, + { L"Singapore Standard Time", L"PH", L"Asia/Manila" }, + { L"Singapore Standard Time", L"SG", L"Asia/Singapore" }, + { L"Singapore Standard Time", L"ZZ", L"Etc/GMT-8" }, + { L"South Africa Standard Time", L"", L"Africa/Johannesburg" }, + { L"South Africa Standard Time", L"BI", L"Africa/Bujumbura" }, + { L"South Africa Standard Time", L"BW", L"Africa/Gaborone" }, + { L"South Africa Standard Time", L"CD", L"Africa/Lubumbashi" }, + { L"South Africa Standard Time", L"LS", L"Africa/Maseru" }, + { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" }, + { L"South Africa Standard Time", L"MW", L"Africa/Blantyre" }, + { L"South Africa Standard Time", L"MZ", L"Africa/Maputo" }, + { L"South Africa Standard Time", L"RW", L"Africa/Kigali" }, + { L"South Africa Standard Time", L"SZ", L"Africa/Mbabane" }, + { L"South Africa Standard Time", L"ZA", L"Africa/Johannesburg" }, + { L"South Africa Standard Time", L"ZM", L"Africa/Lusaka" }, + { L"South Africa Standard Time", L"ZW", L"Africa/Harare" }, + { L"South Africa Standard Time", L"ZZ", L"Etc/GMT-2" }, + { L"Sri Lanka Standard Time", L"", L"Asia/Colombo" }, + { L"Sri Lanka Standard Time", L"LK", L"Asia/Colombo" }, + { L"Syria Standard Time", L"", L"Asia/Damascus" }, + { L"Syria Standard Time", L"SY", L"Asia/Damascus" }, + { L"Taipei Standard Time", L"", L"Asia/Taipei" }, + { L"Taipei Standard Time", L"TW", L"Asia/Taipei" }, + { L"Tasmania Standard Time", L"", L"Australia/Hobart" }, + { L"Tasmania Standard Time", L"AU", L"Australia/Hobart Australia/Currie" }, + { L"Tokyo Standard Time", L"", L"Asia/Tokyo" }, + { L"Tokyo Standard Time", L"ID", L"Asia/Jayapura" }, + { L"Tokyo Standard Time", L"JP", L"Asia/Tokyo" }, + { L"Tokyo Standard Time", L"PW", L"Pacific/Palau" }, + { L"Tokyo Standard Time", L"TL", L"Asia/Dili" }, + { L"Tokyo Standard Time", L"ZZ", L"Etc/GMT-9" }, + { L"Tonga Standard Time", L"", L"Pacific/Tongatapu" }, + { L"Tonga Standard Time", L"KI", L"Pacific/Enderbury" }, + { L"Tonga Standard Time", L"TK", L"Pacific/Fakaofo" }, + { L"Tonga Standard Time", L"TO", L"Pacific/Tongatapu" }, + { L"Tonga Standard Time", L"ZZ", L"Etc/GMT-13" }, + { L"Turkey Standard Time", L"", L"Europe/Istanbul" }, + { L"Turkey Standard Time", L"TR", L"Europe/Istanbul" }, + { L"US Eastern Standard Time", L"", L"America/Indianapolis" }, + { L"US Eastern Standard Time", L"US", L"America/Indianapolis America/Indiana/Marengo America/Indiana/Vevay" }, + { L"US Mountain Standard Time", L"", L"America/Phoenix" }, + { L"US Mountain Standard Time", L"CA", L"America/Dawson_Creek America/Creston" }, + { L"US Mountain Standard Time", L"MX", L"America/Hermosillo" }, + { L"US Mountain Standard Time", L"US", L"America/Phoenix" }, + { L"US Mountain Standard Time", L"ZZ", L"Etc/GMT+7" }, + { L"UTC", L"", L"Etc/GMT" }, + { L"UTC", L"GL", L"America/Danmarkshavn" }, + { L"UTC", L"ZZ", L"Etc/GMT" }, + { L"UTC-02", L"", L"Etc/GMT+2" }, + { L"UTC-02", L"BR", L"America/Noronha" }, + { L"UTC-02", L"GS", L"Atlantic/South_Georgia" }, + { L"UTC-02", L"ZZ", L"Etc/GMT+2" }, + { L"UTC-11", L"", L"Etc/GMT+11" }, + { L"UTC-11", L"AS", L"Pacific/Pago_Pago" }, + { L"UTC-11", L"NU", L"Pacific/Niue" }, + { L"UTC-11", L"UM", L"Pacific/Midway" }, + { L"UTC-11", L"ZZ", L"Etc/GMT+11" }, + { L"UTC+12", L"", L"Etc/GMT-12" }, + { L"UTC+12", L"KI", L"Pacific/Tarawa" }, + { L"UTC+12", L"MH", L"Pacific/Majuro Pacific/Kwajalein" }, + { L"UTC+12", L"NR", L"Pacific/Nauru" }, + { L"UTC+12", L"TV", L"Pacific/Funafuti" }, + { L"UTC+12", L"UM", L"Pacific/Wake" }, + { L"UTC+12", L"WF", L"Pacific/Wallis" }, + { L"UTC+12", L"ZZ", L"Etc/GMT-12" }, + { L"Ulaanbaatar Standard Time", L"", L"Asia/Ulaanbaatar" }, + { L"Ulaanbaatar Standard Time", L"MN", L"Asia/Ulaanbaatar Asia/Choibalsan" }, + { L"Venezuela Standard Time", L"", L"America/Caracas" }, + { L"Venezuela Standard Time", L"VE", L"America/Caracas" }, + { L"Vladivostok Standard Time", L"", L"Asia/Vladivostok" }, + { L"Vladivostok Standard Time", L"RU", L"Asia/Vladivostok Asia/Sakhalin Asia/Ust-Nera" }, + { L"W. Australia Standard Time", L"", L"Australia/Perth" }, + { L"W. Australia Standard Time", L"AQ", L"Antarctica/Casey" }, + { L"W. Australia Standard Time", L"AU", L"Australia/Perth" }, + { L"W. Central Africa Standard Time", L"", L"Africa/Lagos" }, + { L"W. Central Africa Standard Time", L"AO", L"Africa/Luanda" }, + { L"W. Central Africa Standard Time", L"BJ", L"Africa/Porto-Novo" }, + { L"W. Central Africa Standard Time", L"CD", L"Africa/Kinshasa" }, + { L"W. Central Africa Standard Time", L"CF", L"Africa/Bangui" }, + { L"W. Central Africa Standard Time", L"CG", L"Africa/Brazzaville" }, + { L"W. Central Africa Standard Time", L"CM", L"Africa/Douala" }, + { L"W. Central Africa Standard Time", L"DZ", L"Africa/Algiers" }, + { L"W. Central Africa Standard Time", L"GA", L"Africa/Libreville" }, + { L"W. Central Africa Standard Time", L"GQ", L"Africa/Malabo" }, + { L"W. Central Africa Standard Time", L"NE", L"Africa/Niamey" }, + { L"W. Central Africa Standard Time", L"NG", L"Africa/Lagos" }, + { L"W. Central Africa Standard Time", L"TD", L"Africa/Ndjamena" }, + { L"W. Central Africa Standard Time", L"TN", L"Africa/Tunis" }, + { L"W. Central Africa Standard Time", L"ZZ", L"Etc/GMT-1" }, + { L"W. Europe Standard Time", L"", L"Europe/Berlin" }, + { L"W. Europe Standard Time", L"AD", L"Europe/Andorra" }, + { L"W. Europe Standard Time", L"AT", L"Europe/Vienna" }, + { L"W. Europe Standard Time", L"CH", L"Europe/Zurich" }, + { L"W. Europe Standard Time", L"DE", L"Europe/Berlin Europe/Busingen" }, + { L"W. Europe Standard Time", L"GI", L"Europe/Gibraltar" }, + { L"W. Europe Standard Time", L"IT", L"Europe/Rome" }, + { L"W. Europe Standard Time", L"LI", L"Europe/Vaduz" }, + { L"W. Europe Standard Time", L"LU", L"Europe/Luxembourg" }, + { L"W. Europe Standard Time", L"MC", L"Europe/Monaco" }, + { L"W. Europe Standard Time", L"MT", L"Europe/Malta" }, + { L"W. Europe Standard Time", L"NL", L"Europe/Amsterdam" }, + { L"W. Europe Standard Time", L"NO", L"Europe/Oslo" }, + { L"W. Europe Standard Time", L"SE", L"Europe/Stockholm" }, + { L"W. Europe Standard Time", L"SJ", L"Arctic/Longyearbyen" }, + { L"W. Europe Standard Time", L"SM", L"Europe/San_Marino" }, + { L"W. Europe Standard Time", L"VA", L"Europe/Vatican" }, + { L"West Asia Standard Time", L"", L"Asia/Tashkent" }, + { L"West Asia Standard Time", L"AQ", L"Antarctica/Mawson" }, + { L"West Asia Standard Time", L"KZ", L"Asia/Oral Asia/Aqtau Asia/Aqtobe" }, + { L"West Asia Standard Time", L"MV", L"Indian/Maldives" }, + { L"West Asia Standard Time", L"TF", L"Indian/Kerguelen" }, + { L"West Asia Standard Time", L"TJ", L"Asia/Dushanbe" }, + { L"West Asia Standard Time", L"TM", L"Asia/Ashgabat" }, + { L"West Asia Standard Time", L"UZ", L"Asia/Tashkent Asia/Samarkand" }, + { L"West Asia Standard Time", L"ZZ", L"Etc/GMT-5" }, + { L"West Pacific Standard Time", L"", L"Pacific/Port_Moresby" }, + { L"West Pacific Standard Time", L"AQ", L"Antarctica/DumontDUrville" }, + { L"West Pacific Standard Time", L"FM", L"Pacific/Truk" }, + { L"West Pacific Standard Time", L"GU", L"Pacific/Guam" }, + { L"West Pacific Standard Time", L"MP", L"Pacific/Saipan" }, + { L"West Pacific Standard Time", L"PG", L"Pacific/Port_Moresby Pacific/Bougainville" }, + { L"West Pacific Standard Time", L"ZZ", L"Etc/GMT-10" }, + { L"Yakutsk Standard Time", L"", L"Asia/Yakutsk" }, + { L"Yakutsk Standard Time", L"RU", L"Asia/Yakutsk Asia/Khandyga" }, +}; diff --git a/winsup/utils/tzset.c b/winsup/utils/tzset.c index 45f3f1655..2b3f413be 100644 --- a/winsup/utils/tzset.c +++ b/winsup/utils/tzset.c @@ -1,6 +1,6 @@ /* tzset.c: Convert current Windows timezone to POSIX timezone information. - Copyright 2012, 2013 Red Hat, Inc. + Copyright 2012, 2013, 2014 Red Hat, Inc. This file is part of Cygwin. @@ -21,475 +21,10 @@ details. */ #define GEOID_NOT_AVAILABLE -1 #endif -/* This table maps Windows timezone keynames and countries per ISO 3166-1 to - POSIX-compatible timezone IDs. The information is taken from - http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html - - The mapping from unicode.org is just a bit incomplete. It doesn't contain - a few timezones available on Windows XP, namely: - - Armenian Standard Time - Mexico Standard Time - Mexico Standard Time 2 - - as well as the still (Windows 7) available - - Mid-Atlantic Standard Time - - It also doesn't contain some of the deprecated country codes used in older - OSes, namely: - - SP (Serbian, proposed) used in XP - CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista - - While these are apparently old, they are required here to get a complete - mapping on all supported OSes. */ -struct -{ - PCWSTR win_tzkey; - PCWSTR country; - PCWSTR posix_tzid; -} tzmap[] = -{ - { L"AUS Central Standard Time", L"", L"Australia/Darwin" }, - { L"AUS Central Standard Time", L"AU", L"Australia/Darwin" }, - { L"AUS Eastern Standard Time", L"", L"Australia/Sydney" }, - { L"AUS Eastern Standard Time", L"AU", L"Australia/Sydney Australia/Melbourne" }, - { L"Afghanistan Standard Time", L"", L"Asia/Kabul" }, - { L"Afghanistan Standard Time", L"AF", L"Asia/Kabul" }, - { L"Alaskan Standard Time", L"", L"America/Anchorage" }, - { L"Alaskan Standard Time", L"US", L"America/Anchorage America/Juneau America/Nome America/Sitka America/Yakutat" }, - { L"Arab Standard Time", L"", L"Asia/Riyadh" }, - { L"Arab Standard Time", L"BH", L"Asia/Bahrain" }, - { L"Arab Standard Time", L"KW", L"Asia/Kuwait" }, - { L"Arab Standard Time", L"QA", L"Asia/Qatar" }, - { L"Arab Standard Time", L"SA", L"Asia/Riyadh" }, - { L"Arab Standard Time", L"YE", L"Asia/Aden" }, - { L"Arabian Standard Time", L"", L"Asia/Dubai" }, - { L"Arabian Standard Time", L"AE", L"Asia/Dubai" }, - { L"Arabian Standard Time", L"OM", L"Asia/Muscat" }, - { L"Arabian Standard Time", L"ZZ", L"Etc/GMT-4" }, - { L"Arabic Standard Time", L"", L"Asia/Baghdad" }, - { L"Arabic Standard Time", L"IQ", L"Asia/Baghdad" }, - { L"Argentina Standard Time", L"", L"America/Buenos_Aires" }, - { L"Argentina Standard Time", L"AR", L"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" }, - { L"Armenian Standard Time", L"AM", L"Asia/Yerevan" }, - { L"Atlantic Standard Time", L"", L"America/Halifax" }, - { L"Atlantic Standard Time", L"BM", L"Atlantic/Bermuda" }, - { L"Atlantic Standard Time", L"CA", L"America/Halifax America/Glace_Bay America/Goose_Bay America/Moncton" }, - { L"Atlantic Standard Time", L"GL", L"America/Thule" }, - { L"Azerbaijan Standard Time", L"", L"Asia/Baku" }, - { L"Azerbaijan Standard Time", L"AZ", L"Asia/Baku" }, - { L"Azores Standard Time", L"", L"Atlantic/Azores" }, - { L"Azores Standard Time", L"GL", L"America/Scoresbysund" }, - { L"Azores Standard Time", L"PT", L"Atlantic/Azores" }, - { L"Bahia Standard Time", L"", L"America/Bahia" }, - { L"Bahia Standard Time", L"BR", L"America/Bahia" }, - { L"Bangladesh Standard Time", L"", L"Asia/Dhaka" }, - { L"Bangladesh Standard Time", L"BD", L"Asia/Dhaka" }, - { L"Bangladesh Standard Time", L"BT", L"Asia/Thimphu" }, - { L"Canada Central Standard Time", L"", L"America/Regina" }, - { L"Canada Central Standard Time", L"CA", L"America/Regina America/Swift_Current" }, - { L"Cape Verde Standard Time", L"", L"Atlantic/Cape_Verde" }, - { L"Cape Verde Standard Time", L"CV", L"Atlantic/Cape_Verde" }, - { L"Cape Verde Standard Time", L"ZZ", L"Etc/GMT+1" }, - { L"Caucasus Standard Time", L"", L"Asia/Yerevan" }, - { L"Caucasus Standard Time", L"AM", L"Asia/Yerevan" }, - { L"Cen. Australia Standard Time", L"", L"Australia/Adelaide" }, - { L"Cen. Australia Standard Time", L"AU", L"Australia/Adelaide Australia/Broken_Hill" }, - { L"Central America Standard Time", L"", L"America/Guatemala" }, - { L"Central America Standard Time", L"BZ", L"America/Belize" }, - { L"Central America Standard Time", L"CR", L"America/Costa_Rica" }, - { L"Central America Standard Time", L"EC", L"Pacific/Galapagos" }, - { L"Central America Standard Time", L"GT", L"America/Guatemala" }, - { L"Central America Standard Time", L"HN", L"America/Tegucigalpa" }, - { L"Central America Standard Time", L"NI", L"America/Managua" }, - { L"Central America Standard Time", L"SV", L"America/El_Salvador" }, - { L"Central America Standard Time", L"ZZ", L"Etc/GMT+6" }, - { L"Central Asia Standard Time", L"", L"Asia/Almaty" }, - { L"Central Asia Standard Time", L"AQ", L"Antarctica/Vostok" }, - { L"Central Asia Standard Time", L"IO", L"Indian/Chagos" }, - { L"Central Asia Standard Time", L"KG", L"Asia/Bishkek" }, - { L"Central Asia Standard Time", L"KZ", L"Asia/Almaty Asia/Qyzylorda" }, - { L"Central Asia Standard Time", L"ZZ", L"Etc/GMT-6" }, - { L"Central Brazilian Standard Time", L"", L"America/Cuiaba" }, - { L"Central Brazilian Standard Time", L"BR", L"America/Cuiaba America/Campo_Grande" }, - { L"Central Europe Standard Time", L"", L"Europe/Budapest" }, - { L"Central Europe Standard Time", L"AL", L"Europe/Tirane" }, - { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" }, - { L"Central Europe Standard Time", L"CZ", L"Europe/Prague" }, - { L"Central Europe Standard Time", L"HU", L"Europe/Budapest" }, - { L"Central Europe Standard Time", L"ME", L"Europe/Podgorica" }, - { L"Central Europe Standard Time", L"RS", L"Europe/Belgrade" }, - { L"Central Europe Standard Time", L"SI", L"Europe/Ljubljana" }, - { L"Central Europe Standard Time", L"SK", L"Europe/Bratislava" }, - { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" }, - { L"Central European Standard Time", L"", L"Europe/Warsaw" }, - { L"Central European Standard Time", L"BA", L"Europe/Sarajevo" }, - { L"Central European Standard Time", L"HR", L"Europe/Zagreb" }, - { L"Central European Standard Time", L"MK", L"Europe/Skopje" }, - { L"Central European Standard Time", L"PL", L"Europe/Warsaw" }, - { L"Central Pacific Standard Time", L"", L"Pacific/Guadalcanal" }, - { L"Central Pacific Standard Time", L"AQ", L"Antarctica/Macquarie" }, - { L"Central Pacific Standard Time", L"FM", L"Pacific/Ponape Pacific/Kosrae" }, - { L"Central Pacific Standard Time", L"NC", L"Pacific/Noumea" }, - { L"Central Pacific Standard Time", L"SB", L"Pacific/Guadalcanal" }, - { L"Central Pacific Standard Time", L"VU", L"Pacific/Efate" }, - { L"Central Pacific Standard Time", L"ZZ", L"Etc/GMT-11" }, - { L"Central Standard Time", L"", L"America/Chicago" }, - { L"Central Standard Time", L"CA", L"America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute" }, - { L"Central Standard Time", L"MX", L"America/Matamoros" }, - { L"Central Standard Time", L"US", L"America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem" }, - { L"Central Standard Time", L"ZZ", L"CST6CDT" }, - { L"Central Standard Time (Mexico)", L"", L"America/Mexico_City" }, - { L"Central Standard Time (Mexico)", L"MX", L"America/Mexico_City America/Bahia_Banderas America/Cancun America/Merida America/Monterrey" }, - { L"China Standard Time", L"", L"Asia/Shanghai" }, - { L"China Standard Time", L"CN", L"Asia/Shanghai Asia/Chongqing Asia/Harbin Asia/Kashgar Asia/Urumqi" }, - { L"China Standard Time", L"HK", L"Asia/Hong_Kong" }, - { L"China Standard Time", L"MO", L"Asia/Macau" }, - { L"Dateline Standard Time", L"", L"Etc/GMT+12" }, - { L"Dateline Standard Time", L"ZZ", L"Etc/GMT+12" }, - { L"E. Africa Standard Time", L"", L"Africa/Nairobi" }, - { L"E. Africa Standard Time", L"AQ", L"Antarctica/Syowa" }, - { L"E. Africa Standard Time", L"DJ", L"Africa/Djibouti" }, - { L"E. Africa Standard Time", L"ER", L"Africa/Asmera" }, - { L"E. Africa Standard Time", L"ET", L"Africa/Addis_Ababa" }, - { L"E. Africa Standard Time", L"KE", L"Africa/Nairobi" }, - { L"E. Africa Standard Time", L"KM", L"Indian/Comoro" }, - { L"E. Africa Standard Time", L"MG", L"Indian/Antananarivo" }, - { L"E. Africa Standard Time", L"SD", L"Africa/Khartoum" }, - { L"E. Africa Standard Time", L"SO", L"Africa/Mogadishu" }, - { L"E. Africa Standard Time", L"SS", L"Africa/Juba" }, - { L"E. Africa Standard Time", L"TZ", L"Africa/Dar_es_Salaam" }, - { L"E. Africa Standard Time", L"UG", L"Africa/Kampala" }, - { L"E. Africa Standard Time", L"YT", L"Indian/Mayotte" }, - { L"E. Africa Standard Time", L"ZZ", L"Etc/GMT-3" }, - { L"E. Australia Standard Time", L"", L"Australia/Brisbane" }, - { L"E. Australia Standard Time", L"AU", L"Australia/Brisbane Australia/Lindeman" }, - { L"E. Europe Standard Time", L"", L"Asia/Nicosia" }, - { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" }, - { L"E. South America Standard Time", L"", L"America/Sao_Paulo" }, - { L"E. South America Standard Time", L"BR", L"America/Sao_Paulo" }, - { L"Eastern Standard Time", L"", L"America/New_York" }, - { L"Eastern Standard Time", L"BS", L"America/Nassau" }, - { L"Eastern Standard Time", L"CA", L"America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay" }, - { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" }, - { L"Eastern Standard Time", L"US", L"America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, - { L"Eastern Standard Time", L"ZZ", L"EST5EDT" }, - { L"Egypt Standard Time", L"", L"Africa/Cairo" }, - { L"Egypt Standard Time", L"EG", L"Africa/Cairo" }, - { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" }, - { L"Ekaterinburg Standard Time", L"", L"Asia/Yekaterinburg" }, - { L"Ekaterinburg Standard Time", L"RU", L"Asia/Yekaterinburg" }, - { L"FLE Standard Time", L"", L"Europe/Kiev" }, - { L"FLE Standard Time", L"AX", L"Europe/Mariehamn" }, - { L"FLE Standard Time", L"BG", L"Europe/Sofia" }, - { L"FLE Standard Time", L"EE", L"Europe/Tallinn" }, - { L"FLE Standard Time", L"FI", L"Europe/Helsinki" }, - { L"FLE Standard Time", L"LT", L"Europe/Vilnius" }, - { L"FLE Standard Time", L"LV", L"Europe/Riga" }, - { L"FLE Standard Time", L"UA", L"Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye" }, - { L"Fiji Standard Time", L"", L"Pacific/Fiji" }, - { L"Fiji Standard Time", L"FJ", L"Pacific/Fiji" }, - { L"GMT Standard Time", L"", L"Europe/London" }, - { L"GMT Standard Time", L"ES", L"Atlantic/Canary" }, - { L"GMT Standard Time", L"FO", L"Atlantic/Faeroe" }, - { L"GMT Standard Time", L"GB", L"Europe/London" }, - { L"GMT Standard Time", L"GG", L"Europe/Guernsey" }, - { L"GMT Standard Time", L"IE", L"Europe/Dublin" }, - { L"GMT Standard Time", L"IM", L"Europe/Isle_of_Man" }, - { L"GMT Standard Time", L"JE", L"Europe/Jersey" }, - { L"GMT Standard Time", L"PT", L"Europe/Lisbon Atlantic/Madeira" }, - { L"GTB Standard Time", L"", L"Europe/Bucharest" }, - { L"GTB Standard Time", L"GR", L"Europe/Athens" }, - { L"GTB Standard Time", L"MD", L"Europe/Chisinau" }, - { L"GTB Standard Time", L"RO", L"Europe/Bucharest" }, - { L"Georgian Standard Time", L"", L"Asia/Tbilisi" }, - { L"Georgian Standard Time", L"GE", L"Asia/Tbilisi" }, - { L"Greenland Standard Time", L"", L"America/Godthab" }, - { L"Greenland Standard Time", L"GL", L"America/Godthab" }, - { L"Greenwich Standard Time", L"", L"Atlantic/Reykjavik" }, - { L"Greenwich Standard Time", L"BF", L"Africa/Ouagadougou" }, - { L"Greenwich Standard Time", L"CI", L"Africa/Abidjan" }, - { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" }, - { L"Greenwich Standard Time", L"GH", L"Africa/Accra" }, - { L"Greenwich Standard Time", L"GM", L"Africa/Banjul" }, - { L"Greenwich Standard Time", L"GN", L"Africa/Conakry" }, - { L"Greenwich Standard Time", L"GW", L"Africa/Bissau" }, - { L"Greenwich Standard Time", L"IS", L"Atlantic/Reykjavik" }, - { L"Greenwich Standard Time", L"LR", L"Africa/Monrovia" }, - { L"Greenwich Standard Time", L"ML", L"Africa/Bamako" }, - { L"Greenwich Standard Time", L"MR", L"Africa/Nouakchott" }, - { L"Greenwich Standard Time", L"SH", L"Atlantic/St_Helena" }, - { L"Greenwich Standard Time", L"SL", L"Africa/Freetown" }, - { L"Greenwich Standard Time", L"SN", L"Africa/Dakar" }, - { L"Greenwich Standard Time", L"ST", L"Africa/Sao_Tome" }, - { L"Greenwich Standard Time", L"TG", L"Africa/Lome" }, - { L"Hawaiian Standard Time", L"", L"Pacific/Honolulu" }, - { L"Hawaiian Standard Time", L"CK", L"Pacific/Rarotonga" }, - { L"Hawaiian Standard Time", L"PF", L"Pacific/Tahiti" }, - { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" }, - { L"Hawaiian Standard Time", L"UM", L"Pacific/Johnston" }, - { L"Hawaiian Standard Time", L"US", L"Pacific/Honolulu" }, - { L"Hawaiian Standard Time", L"ZZ", L"Etc/GMT+10" }, - { L"India Standard Time", L"", L"Asia/Calcutta" }, - { L"India Standard Time", L"IN", L"Asia/Calcutta" }, - { L"Iran Standard Time", L"", L"Asia/Tehran" }, - { L"Iran Standard Time", L"IR", L"Asia/Tehran" }, - { L"Israel Standard Time", L"", L"Asia/Jerusalem" }, - { L"Israel Standard Time", L"IL", L"Asia/Jerusalem" }, - { L"Jordan Standard Time", L"", L"Asia/Amman" }, - { L"Jordan Standard Time", L"JO", L"Asia/Amman" }, - { L"Kaliningrad Standard Time", L"", L"Europe/Kaliningrad" }, - { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" }, - { L"Kaliningrad Standard Time", L"RU", L"Europe/Kaliningrad" }, - { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" }, - { L"Korea Standard Time", L"", L"Asia/Seoul" }, - { L"Korea Standard Time", L"KP", L"Asia/Pyongyang" }, - { L"Korea Standard Time", L"KR", L"Asia/Seoul" }, - { L"Magadan Standard Time", L"", L"Asia/Magadan" }, - { L"Magadan Standard Time", L"RU", L"Asia/Magadan Asia/Anadyr Asia/Kamchatka" }, - { L"Mauritius Standard Time", L"", L"Indian/Mauritius" }, - { L"Mauritius Standard Time", L"MU", L"Indian/Mauritius" }, - { L"Mauritius Standard Time", L"RE", L"Indian/Reunion" }, - { L"Mauritius Standard Time", L"SC", L"Indian/Mahe" }, - { L"Mexico Standard Time", L"", L"America/Mexico_City" }, - { L"Mexico Standard Time 2", L"", L"America/Mazatlan" }, - { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" }, - { L"Middle East Standard Time", L"", L"Asia/Beirut" }, - { L"Middle East Standard Time", L"LB", L"Asia/Beirut" }, - { L"Montevideo Standard Time", L"", L"America/Montevideo" }, - { L"Montevideo Standard Time", L"UY", L"America/Montevideo" }, - { L"Morocco Standard Time", L"", L"Africa/Casablanca" }, - { L"Morocco Standard Time", L"MA", L"Africa/Casablanca" }, - { L"Mountain Standard Time", L"", L"America/Denver" }, - { L"Mountain Standard Time", L"CA", L"America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife" }, - { L"Mountain Standard Time", L"MX", L"America/Ojinaga" }, - { L"Mountain Standard Time", L"US", L"America/Denver America/Boise America/Shiprock" }, - { L"Mountain Standard Time", L"ZZ", L"MST7MDT" }, - { L"Mountain Standard Time (Mexico)", L"", L"America/Chihuahua" }, - { L"Mountain Standard Time (Mexico)", L"MX", L"America/Chihuahua America/Mazatlan" }, - { L"Myanmar Standard Time", L"", L"Asia/Rangoon" }, - { L"Myanmar Standard Time", L"CC", L"Indian/Cocos" }, - { L"Myanmar Standard Time", L"MM", L"Asia/Rangoon" }, - { L"N. Central Asia Standard Time", L"", L"Asia/Novosibirsk" }, - { L"N. Central Asia Standard Time", L"RU", L"Asia/Novosibirsk Asia/Novokuznetsk Asia/Omsk" }, - { L"Namibia Standard Time", L"", L"Africa/Windhoek" }, - { L"Namibia Standard Time", L"NA", L"Africa/Windhoek" }, - { L"Nepal Standard Time", L"", L"Asia/Kathmandu" }, - { L"Nepal Standard Time", L"NP", L"Asia/Kathmandu" }, - { L"New Zealand Standard Time", L"", L"Pacific/Auckland" }, - { L"New Zealand Standard Time", L"AQ", L"Antarctica/South_Pole Antarctica/McMurdo" }, - { L"New Zealand Standard Time", L"NZ", L"Pacific/Auckland" }, - { L"Newfoundland Standard Time", L"", L"America/St_Johns" }, - { L"Newfoundland Standard Time", L"CA", L"America/St_Johns" }, - { L"North Asia East Standard Time", L"", L"Asia/Irkutsk" }, - { L"North Asia East Standard Time", L"RU", L"Asia/Irkutsk" }, - { L"North Asia Standard Time", L"", L"Asia/Krasnoyarsk" }, - { L"North Asia Standard Time", L"RU", L"Asia/Krasnoyarsk" }, - { L"Pacific SA Standard Time", L"", L"America/Santiago" }, - { L"Pacific SA Standard Time", L"AQ", L"Antarctica/Palmer" }, - { L"Pacific SA Standard Time", L"CL", L"America/Santiago" }, - { L"Pacific Standard Time", L"", L"America/Los_Angeles" }, - { L"Pacific Standard Time", L"CA", L"America/Vancouver America/Dawson America/Whitehorse" }, - { L"Pacific Standard Time", L"MX", L"America/Tijuana" }, - { L"Pacific Standard Time", L"US", L"America/Los_Angeles" }, - { L"Pacific Standard Time", L"ZZ", L"PST8PDT" }, - { L"Pacific Standard Time (Mexico)", L"", L"America/Santa_Isabel" }, - { L"Pacific Standard Time (Mexico)", L"MX", L"America/Santa_Isabel" }, - { L"Pakistan Standard Time", L"", L"Asia/Karachi" }, - { L"Pakistan Standard Time", L"PK", L"Asia/Karachi" }, - { L"Paraguay Standard Time", L"", L"America/Asuncion" }, - { L"Paraguay Standard Time", L"PY", L"America/Asuncion" }, - { L"Romance Standard Time", L"", L"Europe/Paris" }, - { L"Romance Standard Time", L"BE", L"Europe/Brussels" }, - { L"Romance Standard Time", L"DK", L"Europe/Copenhagen" }, - { L"Romance Standard Time", L"ES", L"Europe/Madrid Africa/Ceuta" }, - { L"Romance Standard Time", L"FR", L"Europe/Paris" }, - { L"Russian Standard Time", L"", L"Europe/Moscow" }, - { L"Russian Standard Time", L"RU", L"Europe/Moscow Europe/Samara Europe/Volgograd" }, - { L"SA Eastern Standard Time", L"", L"America/Cayenne" }, - { L"SA Eastern Standard Time", L"AQ", L"Antarctica/Rothera" }, - { L"SA Eastern Standard Time", L"BR", L"America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem" }, - { L"SA Eastern Standard Time", L"GF", L"America/Cayenne" }, - { L"SA Eastern Standard Time", L"SR", L"America/Paramaribo" }, - { L"SA Eastern Standard Time", L"ZZ", L"Etc/GMT+3" }, - { L"SA Pacific Standard Time", L"", L"America/Bogota" }, - { L"SA Pacific Standard Time", L"CA", L"America/Coral_Harbour" }, - { L"SA Pacific Standard Time", L"CO", L"America/Bogota" }, - { L"SA Pacific Standard Time", L"EC", L"America/Guayaquil" }, - { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" }, - { L"SA Pacific Standard Time", L"JM", L"America/Jamaica" }, - { L"SA Pacific Standard Time", L"KY", L"America/Cayman" }, - { L"SA Pacific Standard Time", L"PA", L"America/Panama" }, - { L"SA Pacific Standard Time", L"PE", L"America/Lima" }, - { L"SA Pacific Standard Time", L"ZZ", L"Etc/GMT+5" }, - { L"SA Western Standard Time", L"", L"America/La_Paz" }, - { L"SA Western Standard Time", L"AG", L"America/Antigua" }, - { L"SA Western Standard Time", L"AI", L"America/Anguilla" }, - { L"SA Western Standard Time", L"AW", L"America/Aruba" }, - { L"SA Western Standard Time", L"BB", L"America/Barbados" }, - { L"SA Western Standard Time", L"BL", L"America/St_Barthelemy" }, - { L"SA Western Standard Time", L"BO", L"America/La_Paz" }, - { L"SA Western Standard Time", L"BR", L"America/Manaus America/Boa_Vista America/Eirunepe America/Porto_Velho America/Rio_Branco" }, - { L"SA Western Standard Time", L"CA", L"America/Blanc-Sablon" }, - { L"SA Western Standard Time", L"CW", L"America/Curacao" }, - { L"SA Western Standard Time", L"DM", L"America/Dominica" }, - { L"SA Western Standard Time", L"DO", L"America/Santo_Domingo" }, - { L"SA Western Standard Time", L"GD", L"America/Grenada" }, - { L"SA Western Standard Time", L"GP", L"America/Guadeloupe" }, - { L"SA Western Standard Time", L"GY", L"America/Guyana" }, - { L"SA Western Standard Time", L"KN", L"America/St_Kitts" }, - { L"SA Western Standard Time", L"LC", L"America/St_Lucia" }, - { L"SA Western Standard Time", L"MF", L"America/Marigot" }, - { L"SA Western Standard Time", L"MQ", L"America/Martinique" }, - { L"SA Western Standard Time", L"MS", L"America/Montserrat" }, - { L"SA Western Standard Time", L"PR", L"America/Puerto_Rico" }, - { L"SA Western Standard Time", L"TT", L"America/Port_of_Spain" }, - { L"SA Western Standard Time", L"VC", L"America/St_Vincent" }, - { L"SA Western Standard Time", L"VG", L"America/Tortola" }, - { L"SA Western Standard Time", L"VI", L"America/St_Thomas" }, - { L"SA Western Standard Time", L"ZZ", L"Etc/GMT+4" }, - { L"SE Asia Standard Time", L"", L"Asia/Bangkok" }, - { L"SE Asia Standard Time", L"AQ", L"Antarctica/Davis" }, - { L"SE Asia Standard Time", L"CX", L"Indian/Christmas" }, - { L"SE Asia Standard Time", L"ID", L"Asia/Jakarta Asia/Pontianak" }, - { L"SE Asia Standard Time", L"KH", L"Asia/Phnom_Penh" }, - { L"SE Asia Standard Time", L"LA", L"Asia/Vientiane" }, - { L"SE Asia Standard Time", L"MN", L"Asia/Hovd" }, - { L"SE Asia Standard Time", L"TH", L"Asia/Bangkok" }, - { L"SE Asia Standard Time", L"VN", L"Asia/Saigon" }, - { L"SE Asia Standard Time", L"ZZ", L"Etc/GMT-7" }, - { L"Samoa Standard Time", L"", L"Pacific/Apia" }, - { L"Samoa Standard Time", L"WS", L"Pacific/Apia" }, - { L"Singapore Standard Time", L"", L"Asia/Singapore" }, - { L"Singapore Standard Time", L"BN", L"Asia/Brunei" }, - { L"Singapore Standard Time", L"ID", L"Asia/Makassar" }, - { L"Singapore Standard Time", L"MY", L"Asia/Kuala_Lumpur Asia/Kuching" }, - { L"Singapore Standard Time", L"PH", L"Asia/Manila" }, - { L"Singapore Standard Time", L"SG", L"Asia/Singapore" }, - { L"Singapore Standard Time", L"ZZ", L"Etc/GMT-8" }, - { L"South Africa Standard Time", L"", L"Africa/Johannesburg" }, - { L"South Africa Standard Time", L"BI", L"Africa/Bujumbura" }, - { L"South Africa Standard Time", L"BW", L"Africa/Gaborone" }, - { L"South Africa Standard Time", L"CD", L"Africa/Lubumbashi" }, - { L"South Africa Standard Time", L"LS", L"Africa/Maseru" }, - { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" }, - { L"South Africa Standard Time", L"MW", L"Africa/Blantyre" }, - { L"South Africa Standard Time", L"MZ", L"Africa/Maputo" }, - { L"South Africa Standard Time", L"RW", L"Africa/Kigali" }, - { L"South Africa Standard Time", L"SZ", L"Africa/Mbabane" }, - { L"South Africa Standard Time", L"ZA", L"Africa/Johannesburg" }, - { L"South Africa Standard Time", L"ZM", L"Africa/Lusaka" }, - { L"South Africa Standard Time", L"ZW", L"Africa/Harare" }, - { L"South Africa Standard Time", L"ZZ", L"Etc/GMT-2" }, - { L"Sri Lanka Standard Time", L"", L"Asia/Colombo" }, - { L"Sri Lanka Standard Time", L"LK", L"Asia/Colombo" }, - { L"Syria Standard Time", L"", L"Asia/Damascus" }, - { L"Syria Standard Time", L"SY", L"Asia/Damascus" }, - { L"Taipei Standard Time", L"", L"Asia/Taipei" }, - { L"Taipei Standard Time", L"TW", L"Asia/Taipei" }, - { L"Tasmania Standard Time", L"", L"Australia/Hobart" }, - { L"Tasmania Standard Time", L"AU", L"Australia/Hobart Australia/Currie" }, - { L"Tokyo Standard Time", L"", L"Asia/Tokyo" }, - { L"Tokyo Standard Time", L"ID", L"Asia/Jayapura" }, - { L"Tokyo Standard Time", L"JP", L"Asia/Tokyo" }, - { L"Tokyo Standard Time", L"PW", L"Pacific/Palau" }, - { L"Tokyo Standard Time", L"TL", L"Asia/Dili" }, - { L"Tokyo Standard Time", L"ZZ", L"Etc/GMT-9" }, - { L"Tonga Standard Time", L"", L"Pacific/Tongatapu" }, - { L"Tonga Standard Time", L"KI", L"Pacific/Enderbury" }, - { L"Tonga Standard Time", L"TO", L"Pacific/Tongatapu" }, - { L"Tonga Standard Time", L"ZZ", L"Etc/GMT-13" }, - { L"Turkey Standard Time", L"", L"Europe/Istanbul" }, - { L"Turkey Standard Time", L"TR", L"Europe/Istanbul" }, - { L"US Eastern Standard Time", L"", L"America/Indianapolis" }, - { L"US Eastern Standard Time", L"US", L"America/Indianapolis America/Indiana/Marengo America/Indiana/Vevay" }, - { L"US Mountain Standard Time", L"", L"America/Phoenix" }, - { L"US Mountain Standard Time", L"CA", L"America/Dawson_Creek" }, - { L"US Mountain Standard Time", L"MX", L"America/Hermosillo" }, - { L"US Mountain Standard Time", L"US", L"America/Phoenix" }, - { L"US Mountain Standard Time", L"ZZ", L"Etc/GMT+7" }, - { L"UTC", L"", L"Etc/GMT" }, - { L"UTC", L"GL", L"America/Danmarkshavn" }, - { L"UTC", L"ZZ", L"Etc/GMT" }, - { L"UTC+12", L"", L"Etc/GMT-12" }, - { L"UTC+12", L"KI", L"Pacific/Tarawa" }, - { L"UTC+12", L"MH", L"Pacific/Majuro Pacific/Kwajalein" }, - { L"UTC+12", L"NR", L"Pacific/Nauru" }, - { L"UTC+12", L"TV", L"Pacific/Funafuti" }, - { L"UTC+12", L"UM", L"Pacific/Wake" }, - { L"UTC+12", L"WF", L"Pacific/Wallis" }, - { L"UTC+12", L"ZZ", L"Etc/GMT-12" }, - { L"UTC-02", L"", L"Etc/GMT+2" }, - { L"UTC-02", L"BR", L"America/Noronha" }, - { L"UTC-02", L"GS", L"Atlantic/South_Georgia" }, - { L"UTC-02", L"ZZ", L"Etc/GMT+2" }, - { L"UTC-11", L"", L"Etc/GMT+11" }, - { L"UTC-11", L"AS", L"Pacific/Pago_Pago" }, - { L"UTC-11", L"NU", L"Pacific/Niue" }, - { L"UTC-11", L"UM", L"Pacific/Midway" }, - { L"UTC-11", L"ZZ", L"Etc/GMT+11" }, - { L"Ulaanbaatar Standard Time", L"", L"Asia/Ulaanbaatar" }, - { L"Ulaanbaatar Standard Time", L"MN", L"Asia/Ulaanbaatar Asia/Choibalsan" }, - { L"Venezuela Standard Time", L"", L"America/Caracas" }, - { L"Venezuela Standard Time", L"VE", L"America/Caracas" }, - { L"Vladivostok Standard Time", L"", L"Asia/Vladivostok" }, - { L"Vladivostok Standard Time", L"RU", L"Asia/Vladivostok Asia/Sakhalin" }, - { L"W. Australia Standard Time", L"", L"Australia/Perth" }, - { L"W. Australia Standard Time", L"AQ", L"Antarctica/Casey" }, - { L"W. Australia Standard Time", L"AU", L"Australia/Perth" }, - { L"W. Central Africa Standard Time", L"", L"Africa/Lagos" }, - { L"W. Central Africa Standard Time", L"AO", L"Africa/Luanda" }, - { L"W. Central Africa Standard Time", L"BJ", L"Africa/Porto-Novo" }, - { L"W. Central Africa Standard Time", L"CD", L"Africa/Kinshasa" }, - { L"W. Central Africa Standard Time", L"CF", L"Africa/Bangui" }, - { L"W. Central Africa Standard Time", L"CG", L"Africa/Brazzaville" }, - { L"W. Central Africa Standard Time", L"CM", L"Africa/Douala" }, - { L"W. Central Africa Standard Time", L"DZ", L"Africa/Algiers" }, - { L"W. Central Africa Standard Time", L"GA", L"Africa/Libreville" }, - { L"W. Central Africa Standard Time", L"GQ", L"Africa/Malabo" }, - { L"W. Central Africa Standard Time", L"NE", L"Africa/Niamey" }, - { L"W. Central Africa Standard Time", L"NG", L"Africa/Lagos" }, - { L"W. Central Africa Standard Time", L"TD", L"Africa/Ndjamena" }, - { L"W. Central Africa Standard Time", L"TN", L"Africa/Tunis" }, - { L"W. Central Africa Standard Time", L"ZZ", L"Etc/GMT-1" }, - { L"W. Europe Standard Time", L"", L"Europe/Berlin" }, - { L"W. Europe Standard Time", L"AD", L"Europe/Andorra" }, - { L"W. Europe Standard Time", L"AT", L"Europe/Vienna" }, - { L"W. Europe Standard Time", L"CH", L"Europe/Zurich" }, - { L"W. Europe Standard Time", L"DE", L"Europe/Berlin" }, - { L"W. Europe Standard Time", L"GI", L"Europe/Gibraltar" }, - { L"W. Europe Standard Time", L"IT", L"Europe/Rome" }, - { L"W. Europe Standard Time", L"LI", L"Europe/Vaduz" }, - { L"W. Europe Standard Time", L"LU", L"Europe/Luxembourg" }, - { L"W. Europe Standard Time", L"MC", L"Europe/Monaco" }, - { L"W. Europe Standard Time", L"MT", L"Europe/Malta" }, - { L"W. Europe Standard Time", L"NL", L"Europe/Amsterdam" }, - { L"W. Europe Standard Time", L"NO", L"Europe/Oslo" }, - { L"W. Europe Standard Time", L"SE", L"Europe/Stockholm" }, - { L"W. Europe Standard Time", L"SJ", L"Arctic/Longyearbyen" }, - { L"W. Europe Standard Time", L"SM", L"Europe/San_Marino" }, - { L"W. Europe Standard Time", L"VA", L"Europe/Vatican" }, - { L"West Asia Standard Time", L"", L"Asia/Tashkent" }, - { L"West Asia Standard Time", L"AQ", L"Antarctica/Mawson" }, - { L"West Asia Standard Time", L"KZ", L"Asia/Oral Asia/Aqtau Asia/Aqtobe" }, - { L"West Asia Standard Time", L"MV", L"Indian/Maldives" }, - { L"West Asia Standard Time", L"TF", L"Indian/Kerguelen" }, - { L"West Asia Standard Time", L"TJ", L"Asia/Dushanbe" }, - { L"West Asia Standard Time", L"TM", L"Asia/Ashgabat" }, - { L"West Asia Standard Time", L"UZ", L"Asia/Tashkent Asia/Samarkand" }, - { L"West Asia Standard Time", L"ZZ", L"Etc/GMT-5" }, - { L"West Pacific Standard Time", L"", L"Pacific/Port_Moresby" }, - { L"West Pacific Standard Time", L"AQ", L"Antarctica/DumontDUrville" }, - { L"West Pacific Standard Time", L"FM", L"Pacific/Truk" }, - { L"West Pacific Standard Time", L"GU", L"Pacific/Guam" }, - { L"West Pacific Standard Time", L"MP", L"Pacific/Saipan" }, - { L"West Pacific Standard Time", L"PG", L"Pacific/Port_Moresby" }, - { L"West Pacific Standard Time", L"ZZ", L"Etc/GMT-10" }, - { L"Yakutsk Standard Time", L"", L"Asia/Yakutsk" }, - { L"Yakutsk Standard Time", L"RU", L"Asia/Yakutsk" } -}; +/* The auto-generated tzmap.h contains the mapping table from Windows timezone + and country per ISO 3166-1 to POSIX timezone. For more info, see the file + itself. */ +#include "tzmap.h" #define TZMAP_SIZE (sizeof tzmap / sizeof tzmap[0]) @@ -505,10 +40,6 @@ static char opts[] = "hV"; #define REG_TZINFO L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation" #define REG_TZDB L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones" -/* Not available on pre-XP */ -GEOID WINAPI (*getusergeoid)(GEOCLASS); -int WINAPI (*getgeoinfo)(GEOID, GEOTYPE, LPWSTR, int, LANGID); - static inline HKEY reg_open (HKEY pkey, PCWSTR path, const char *msg) { @@ -661,22 +192,13 @@ main (int argc, char **argv) } reg_close (hkey); - /* Fetch addresses of Geo functions. As long as we support Windows 2000 - this is required, unfortunately. */ - getusergeoid = (GEOID (WINAPI *)()) - GetProcAddress (GetModuleHandle ("kernel32.dll"), "GetUserGeoID"); - getgeoinfo = (int (WINAPI *)(GEOID, GEOTYPE, LPWSTR, int, LANGID)) - GetProcAddress (GetModuleHandle ("kernel32.dll"), "GetGeoInfoW"); + /* We fetch the current Geo-location of the user and convert it to an + ISO 3166-1 compatible nation code. */ *country = L'\0'; - /* Post-W2K we fetch the current Geo-location of the user and convert it - to a ISO 3166-1 compatible nation code. */ - if (getusergeoid && getgeoinfo) - { - geo = getusergeoid (GEOCLASS_NATION); - if (geo != GEOID_NOT_AVAILABLE) - getgeoinfo (geo, GEO_ISO2, country, sizeof country, 0); - } - /* On W2K, or if the Geo-location isn't available, we use the locale + geo = GetUserGeoID (GEOCLASS_NATION); + if (geo != GEOID_NOT_AVAILABLE) + GetGeoInfoW (geo, GEO_ISO2, country, sizeof country, 0); + /* If, for some reason, the Geo-location isn't available, we use the locale setting instead. */ if (!*country) GetLocaleInfoW (LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME,