diff --git a/timezones.cpp b/timezones.cpp new file mode 100644 index 0000000..6af6240 --- /dev/null +++ b/timezones.cpp @@ -0,0 +1,978 @@ +#include "timezones.h" + +#include "lwip/arch.h" +#include +constexpr timezone_t timezones[] = { + // Africa/Abidjan - GMT + {"Africa/Abidjan", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Accra - GMT + {"Africa/Accra", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Addis_Ababa - EAT + {"Africa/Addis_Ababa", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Algiers - CET + {"Africa/Algiers", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Asmara - EAT + {"Africa/Asmara", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Bamako - GMT + {"Africa/Bamako", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Bangui - WAT + {"Africa/Bangui", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Banjul - GMT + {"Africa/Banjul", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Bissau - GMT + {"Africa/Bissau", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Blantyre - CAT + {"Africa/Blantyre", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Brazzaville - WAT + {"Africa/Brazzaville", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Bujumbura - CAT + {"Africa/Bujumbura", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Cairo - EET/EEST + {"Africa/Cairo", "EET", "EEST", 2, 0, 3, 0, 4, 5, 5, 0, 0, 10, 5, 4, 24, 0, 1, 0}, + // Africa/Casablanca - +01 + {"Africa/Casablanca", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Ceuta - CET/CEST + {"Africa/Ceuta", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Africa/Conakry - GMT + {"Africa/Conakry", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Dakar - GMT + {"Africa/Dakar", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Dar_es_Salaam - EAT + {"Africa/Dar_es_Salaam", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Djibouti - EAT + {"Africa/Djibouti", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Douala - WAT + {"Africa/Douala", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/El_Aaiun - +01 + {"Africa/El_Aaiun", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Freetown - GMT + {"Africa/Freetown", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Gaborone - CAT + {"Africa/Gaborone", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Harare - CAT + {"Africa/Harare", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Johannesburg - SAST + {"Africa/Johannesburg", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Juba - CAT + {"Africa/Juba", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Kampala - EAT + {"Africa/Kampala", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Khartoum - CAT + {"Africa/Khartoum", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Kigali - CAT + {"Africa/Kigali", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Kinshasa - WAT + {"Africa/Kinshasa", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Lagos - WAT + {"Africa/Lagos", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Libreville - WAT + {"Africa/Libreville", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Lome - GMT + {"Africa/Lome", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Luanda - WAT + {"Africa/Luanda", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Lubumbashi - CAT + {"Africa/Lubumbashi", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Lusaka - CAT + {"Africa/Lusaka", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Malabo - WAT + {"Africa/Malabo", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Maputo - CAT + {"Africa/Maputo", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Maseru - SAST + {"Africa/Maseru", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Mbabane - SAST + {"Africa/Mbabane", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Mogadishu - EAT + {"Africa/Mogadishu", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Monrovia - GMT + {"Africa/Monrovia", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Nairobi - EAT + {"Africa/Nairobi", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Ndjamena - WAT + {"Africa/Ndjamena", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Niamey - WAT + {"Africa/Niamey", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Nouakchott - GMT + {"Africa/Nouakchott", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Ouagadougou - GMT + {"Africa/Ouagadougou", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Porto-Novo - WAT + {"Africa/Porto-Novo", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Sao_Tome - GMT + {"Africa/Sao_Tome", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Tripoli - EET + {"Africa/Tripoli", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Tunis - CET + {"Africa/Tunis", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Africa/Windhoek - CAT + {"Africa/Windhoek", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Adak - HST/HDT + {"America/Adak", "HST", "HDT", -10, 0, -9, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Anchorage - AKST/AKDT + {"America/Anchorage", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Anguilla - AST + {"America/Anguilla", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Antigua - AST + {"America/Antigua", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Araguaina - -03 + {"America/Araguaina", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Buenos_Aires - -03 + {"America/Argentina/Buenos_Aires", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Catamarca - -03 + {"America/Argentina/Catamarca", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Cordoba - -03 + {"America/Argentina/Cordoba", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Jujuy - -03 + {"America/Argentina/Jujuy", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/La_Rioja - -03 + {"America/Argentina/La_Rioja", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Mendoza - -03 + {"America/Argentina/Mendoza", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Rio_Gallegos - -03 + {"America/Argentina/Rio_Gallegos", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Salta - -03 + {"America/Argentina/Salta", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/San_Juan - -03 + {"America/Argentina/San_Juan", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/San_Luis - -03 + {"America/Argentina/San_Luis", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Tucuman - -03 + {"America/Argentina/Tucuman", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Argentina/Ushuaia - -03 + {"America/Argentina/Ushuaia", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Aruba - AST + {"America/Aruba", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Asuncion - -03 + {"America/Asuncion", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Atikokan - EST + {"America/Atikokan", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Bahia - -03 + {"America/Bahia", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Bahia_Banderas - CST + {"America/Bahia_Banderas", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Barbados - AST + {"America/Barbados", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Belem - -03 + {"America/Belem", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Belize - CST + {"America/Belize", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Blanc-Sablon - AST + {"America/Blanc-Sablon", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Boa_Vista - -04 + {"America/Boa_Vista", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Bogota - -05 + {"America/Bogota", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Boise - MST/MDT + {"America/Boise", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Cambridge_Bay - MST/MDT + {"America/Cambridge_Bay", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Campo_Grande - -04 + {"America/Campo_Grande", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Cancun - EST + {"America/Cancun", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Caracas - -04 + {"America/Caracas", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Cayenne - -03 + {"America/Cayenne", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Cayman - EST + {"America/Cayman", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Chicago - CST/CDT + {"America/Chicago", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Chihuahua - CST + {"America/Chihuahua", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Costa_Rica - CST + {"America/Costa_Rica", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Creston - MST + {"America/Creston", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Cuiaba - -04 + {"America/Cuiaba", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Curacao - AST + {"America/Curacao", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Danmarkshavn - GMT + {"America/Danmarkshavn", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Dawson - MST + {"America/Dawson", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Dawson_Creek - MST + {"America/Dawson_Creek", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Denver - MST/MDT + {"America/Denver", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Detroit - EST/EDT + {"America/Detroit", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Dominica - AST + {"America/Dominica", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Edmonton - MST/MDT + {"America/Edmonton", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Eirunepe - -05 + {"America/Eirunepe", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/El_Salvador - CST + {"America/El_Salvador", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Fortaleza - -03 + {"America/Fortaleza", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Fort_Nelson - MST + {"America/Fort_Nelson", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Glace_Bay - AST/ADT + {"America/Glace_Bay", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Godthab - -02/-01 + {"America/Godthab", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // America/Goose_Bay - AST/ADT + {"America/Goose_Bay", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Grand_Turk - EST/EDT + {"America/Grand_Turk", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Grenada - AST + {"America/Grenada", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Guadeloupe - AST + {"America/Guadeloupe", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Guatemala - CST + {"America/Guatemala", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Guayaquil - -05 + {"America/Guayaquil", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Guyana - -04 + {"America/Guyana", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Halifax - AST/ADT + {"America/Halifax", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Havana - CST/CDT + {"America/Havana", "CST", "CDT", -5, 0, -4, 0, 3, 2, 0, 0, 0, 11, 1, 0, 1, 0, 1, 0}, + // America/Hermosillo - MST + {"America/Hermosillo", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Indiana/Indianapolis - EST/EDT + {"America/Indiana/Indianapolis", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Knox - CST/CDT + {"America/Indiana/Knox", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Marengo - EST/EDT + {"America/Indiana/Marengo", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Petersburg - EST/EDT + {"America/Indiana/Petersburg", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Tell_City - CST/CDT + {"America/Indiana/Tell_City", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Vevay - EST/EDT + {"America/Indiana/Vevay", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Vincennes - EST/EDT + {"America/Indiana/Vincennes", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Indiana/Winamac - EST/EDT + {"America/Indiana/Winamac", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Inuvik - MST/MDT + {"America/Inuvik", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Iqaluit - EST/EDT + {"America/Iqaluit", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Jamaica - EST + {"America/Jamaica", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Juneau - AKST/AKDT + {"America/Juneau", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Kentucky/Louisville - EST/EDT + {"America/Kentucky/Louisville", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Kentucky/Monticello - EST/EDT + {"America/Kentucky/Monticello", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Kralendijk - AST + {"America/Kralendijk", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/La_Paz - -04 + {"America/La_Paz", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Lima - -05 + {"America/Lima", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Los_Angeles - PST/PDT + {"America/Los_Angeles", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Lower_Princes - AST + {"America/Lower_Princes", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Maceio - -03 + {"America/Maceio", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Managua - CST + {"America/Managua", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Manaus - -04 + {"America/Manaus", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Marigot - AST + {"America/Marigot", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Martinique - AST + {"America/Martinique", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Matamoros - CST/CDT + {"America/Matamoros", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Mazatlan - MST + {"America/Mazatlan", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Menominee - CST/CDT + {"America/Menominee", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Merida - CST + {"America/Merida", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Metlakatla - AKST/AKDT + {"America/Metlakatla", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Mexico_City - CST + {"America/Mexico_City", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Miquelon - -03/-02 + {"America/Miquelon", "-03", "-02", -3, 0, -2, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Moncton - AST/ADT + {"America/Moncton", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Monterrey - CST + {"America/Monterrey", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Montevideo - -03 + {"America/Montevideo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Montreal - EST/EDT + {"America/Montreal", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Montserrat - AST + {"America/Montserrat", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Nassau - EST/EDT + {"America/Nassau", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/New_York - EST/EDT + {"America/New_York", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Nipigon - EST/EDT + {"America/Nipigon", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Nome - AKST/AKDT + {"America/Nome", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Noronha - -02 + {"America/Noronha", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/North_Dakota/Beulah - CST/CDT + {"America/North_Dakota/Beulah", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/North_Dakota/Center - CST/CDT + {"America/North_Dakota/Center", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/North_Dakota/New_Salem - CST/CDT + {"America/North_Dakota/New_Salem", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Nuuk - -02/-01 + {"America/Nuuk", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // America/Ojinaga - CST/CDT + {"America/Ojinaga", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Panama - EST + {"America/Panama", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Pangnirtung - EST/EDT + {"America/Pangnirtung", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Paramaribo - -03 + {"America/Paramaribo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Phoenix - MST + {"America/Phoenix", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Port-au-Prince - EST/EDT + {"America/Port-au-Prince", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Port_of_Spain - AST + {"America/Port_of_Spain", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Porto_Velho - -04 + {"America/Porto_Velho", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Puerto_Rico - AST + {"America/Puerto_Rico", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Punta_Arenas - -03 + {"America/Punta_Arenas", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Rainy_River - CST/CDT + {"America/Rainy_River", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Rankin_Inlet - CST/CDT + {"America/Rankin_Inlet", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Recife - -03 + {"America/Recife", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Regina - CST + {"America/Regina", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Resolute - CST/CDT + {"America/Resolute", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Rio_Branco - -05 + {"America/Rio_Branco", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Santarem - -03 + {"America/Santarem", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Santiago - -04/-03 + {"America/Santiago", "-04", "-03", -4, 0, -3, 0, 9, 1, 6, 24, 0, 4, 1, 6, 24, 0, 1, 0}, + // America/Santo_Domingo - AST + {"America/Santo_Domingo", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Sao_Paulo - -03 + {"America/Sao_Paulo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Scoresbysund - -02/-01 + {"America/Scoresbysund", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // America/Sitka - AKST/AKDT + {"America/Sitka", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/St_Barthelemy - AST + {"America/St_Barthelemy", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/St_Johns - NST/NDT + {"America/St_Johns", "NST", "NDT", -3, 30, -2, 30, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/St_Kitts - AST + {"America/St_Kitts", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/St_Lucia - AST + {"America/St_Lucia", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/St_Thomas - AST + {"America/St_Thomas", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/St_Vincent - AST + {"America/St_Vincent", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Swift_Current - CST + {"America/Swift_Current", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Tegucigalpa - CST + {"America/Tegucigalpa", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Thule - AST/ADT + {"America/Thule", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Thunder_Bay - EST/EDT + {"America/Thunder_Bay", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Tijuana - PST/PDT + {"America/Tijuana", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Toronto - EST/EDT + {"America/Toronto", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Tortola - AST + {"America/Tortola", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Vancouver - PST/PDT + {"America/Vancouver", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Whitehorse - MST + {"America/Whitehorse", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // America/Winnipeg - CST/CDT + {"America/Winnipeg", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Yakutat - AKST/AKDT + {"America/Yakutat", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // America/Yellowknife - MST/MDT + {"America/Yellowknife", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // Antarctica/Casey - +08 + {"Antarctica/Casey", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/Davis - +07 + {"Antarctica/Davis", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/DumontDUrville - +10 + {"Antarctica/DumontDUrville", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/Macquarie - AEST/AEDT + {"Antarctica/Macquarie", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Antarctica/Mawson - +05 + {"Antarctica/Mawson", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/McMurdo - NZST/NZDT + {"Antarctica/McMurdo", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Antarctica/Palmer - -03 + {"Antarctica/Palmer", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/Rothera - -03 + {"Antarctica/Rothera", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/Syowa - +03 + {"Antarctica/Syowa", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Antarctica/Troll - +00/+02 + {"Antarctica/Troll", "+00", "+02", 0, 0, 2, 0, 3, 5, 0, 1, 0, 10, 5, 0, 3, 0, 1, 0}, + // Antarctica/Vostok - +05 + {"Antarctica/Vostok", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Arctic/Longyearbyen - CET/CEST + {"Arctic/Longyearbyen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Asia/Aden - +03 + {"Asia/Aden", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Almaty - +05 + {"Asia/Almaty", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Amman - +03 + {"Asia/Amman", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Anadyr - +12 + {"Asia/Anadyr", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Aqtau - +05 + {"Asia/Aqtau", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Aqtobe - +05 + {"Asia/Aqtobe", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Ashgabat - +05 + {"Asia/Ashgabat", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Atyrau - +05 + {"Asia/Atyrau", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Baghdad - +03 + {"Asia/Baghdad", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Bahrain - +03 + {"Asia/Bahrain", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Baku - +04 + {"Asia/Baku", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Bangkok - +07 + {"Asia/Bangkok", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Barnaul - +07 + {"Asia/Barnaul", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Beirut - EET/EEST + {"Asia/Beirut", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 0, 0, 10, 5, 0, 0, 0, 1, 0}, + // Asia/Bishkek - +06 + {"Asia/Bishkek", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Brunei - +08 + {"Asia/Brunei", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Chita - +09 + {"Asia/Chita", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Choibalsan - +08 + {"Asia/Choibalsan", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Colombo - +0530 + {"Asia/Colombo", "+0530", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Damascus - +03 + {"Asia/Damascus", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Dhaka - +06 + {"Asia/Dhaka", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Dili - +09 + {"Asia/Dili", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Dubai - +04 + {"Asia/Dubai", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Dushanbe - +05 + {"Asia/Dushanbe", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Famagusta - EET/EEST + {"Asia/Famagusta", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Asia/Gaza - EET/EEST + {"Asia/Gaza", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, + // Asia/Hebron - EET/EEST + {"Asia/Hebron", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, + // Asia/Ho_Chi_Minh - +07 + {"Asia/Ho_Chi_Minh", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Hong_Kong - HKT + {"Asia/Hong_Kong", "HKT", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Hovd - +07 + {"Asia/Hovd", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Irkutsk - +08 + {"Asia/Irkutsk", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Jakarta - WIB + {"Asia/Jakarta", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Jayapura - WIT + {"Asia/Jayapura", "WIT", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Jerusalem - IST/IDT + {"Asia/Jerusalem", "IST", "IDT", 2, 0, 3, 0, 3, 4, 4, 26, 0, 10, 5, 0, 2, 0, 1, 0}, + // Asia/Kabul - +0430 + {"Asia/Kabul", "+0430", "", 4, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kamchatka - +12 + {"Asia/Kamchatka", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Karachi - PKT + {"Asia/Karachi", "PKT", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kathmandu - +0545 + {"Asia/Kathmandu", "+0545", "", 5, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Khandyga - +09 + {"Asia/Khandyga", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kolkata - IST + {"Asia/Kolkata", "IST", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Krasnoyarsk - +07 + {"Asia/Krasnoyarsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kuala_Lumpur - +08 + {"Asia/Kuala_Lumpur", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kuching - +08 + {"Asia/Kuching", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Kuwait - +03 + {"Asia/Kuwait", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Macau - CST + {"Asia/Macau", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Magadan - +11 + {"Asia/Magadan", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Makassar - WITA + {"Asia/Makassar", "WITA", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Manila - PST + {"Asia/Manila", "PST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Muscat - +04 + {"Asia/Muscat", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Nicosia - EET/EEST + {"Asia/Nicosia", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Asia/Novokuznetsk - +07 + {"Asia/Novokuznetsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Novosibirsk - +07 + {"Asia/Novosibirsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Omsk - +06 + {"Asia/Omsk", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Oral - +05 + {"Asia/Oral", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Phnom_Penh - +07 + {"Asia/Phnom_Penh", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Pontianak - WIB + {"Asia/Pontianak", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Pyongyang - KST + {"Asia/Pyongyang", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Qatar - +03 + {"Asia/Qatar", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Qyzylorda - +05 + {"Asia/Qyzylorda", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Riyadh - +03 + {"Asia/Riyadh", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Sakhalin - +11 + {"Asia/Sakhalin", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Samarkand - +05 + {"Asia/Samarkand", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Seoul - KST + {"Asia/Seoul", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Shanghai - CST + {"Asia/Shanghai", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Singapore - +08 + {"Asia/Singapore", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Srednekolymsk - +11 + {"Asia/Srednekolymsk", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Taipei - CST + {"Asia/Taipei", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Tashkent - +05 + {"Asia/Tashkent", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Tbilisi - +04 + {"Asia/Tbilisi", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Tehran - +0330 + {"Asia/Tehran", "+0330", "", 3, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Thimphu - +06 + {"Asia/Thimphu", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Tokyo - JST + {"Asia/Tokyo", "JST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Tomsk - +07 + {"Asia/Tomsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Ulaanbaatar - +08 + {"Asia/Ulaanbaatar", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Urumqi - +06 + {"Asia/Urumqi", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Ust-Nera - +10 + {"Asia/Ust-Nera", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Vientiane - +07 + {"Asia/Vientiane", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Vladivostok - +10 + {"Asia/Vladivostok", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Yakutsk - +09 + {"Asia/Yakutsk", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Yangon - +0630 + {"Asia/Yangon", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Yekaterinburg - +05 + {"Asia/Yekaterinburg", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Asia/Yerevan - +04 + {"Asia/Yerevan", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Atlantic/Azores - -01/+00 + {"Atlantic/Azores", "-01", "+00", -1, 0, 0, 0, 3, 5, 0, 0, 0, 10, 5, 0, 1, 0, 1, 0}, + // Atlantic/Bermuda - AST/ADT + {"Atlantic/Bermuda", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // Atlantic/Canary - WET/WEST + {"Atlantic/Canary", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Atlantic/Cape_Verde - -01 + {"Atlantic/Cape_Verde", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Atlantic/Faroe - WET/WEST + {"Atlantic/Faroe", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Atlantic/Madeira - WET/WEST + {"Atlantic/Madeira", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Atlantic/Reykjavik - GMT + {"Atlantic/Reykjavik", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Atlantic/South_Georgia - -02 + {"Atlantic/South_Georgia", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Atlantic/Stanley - -03 + {"Atlantic/Stanley", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Atlantic/St_Helena - GMT + {"Atlantic/St_Helena", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Adelaide - ACST/ACDT + {"Australia/Adelaide", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Australia/Brisbane - AEST + {"Australia/Brisbane", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Broken_Hill - ACST/ACDT + {"Australia/Broken_Hill", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Australia/Currie - AEST/AEDT + {"Australia/Currie", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Australia/Darwin - ACST + {"Australia/Darwin", "ACST", "", 9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Eucla - +0845 + {"Australia/Eucla", "+0845", "", 8, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Hobart - AEST/AEDT + {"Australia/Hobart", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Australia/Lindeman - AEST + {"Australia/Lindeman", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Lord_Howe - +1030/+11 + {"Australia/Lord_Howe", "+1030", "+11", 10, 30, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 2, 0, 1, 0}, + // Australia/Melbourne - AEST/AEDT + {"Australia/Melbourne", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Australia/Perth - AWST + {"Australia/Perth", "AWST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Australia/Sydney - AEST/AEDT + {"Australia/Sydney", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Europe/Amsterdam - CET/CEST + {"Europe/Amsterdam", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Andorra - CET/CEST + {"Europe/Andorra", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Astrakhan - +04 + {"Europe/Astrakhan", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Athens - EET/EEST + {"Europe/Athens", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Belgrade - CET/CEST + {"Europe/Belgrade", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Berlin - CET/CEST + {"Europe/Berlin", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Bratislava - CET/CEST + {"Europe/Bratislava", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Brussels - CET/CEST + {"Europe/Brussels", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Bucharest - EET/EEST + {"Europe/Bucharest", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Budapest - CET/CEST + {"Europe/Budapest", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Busingen - CET/CEST + {"Europe/Busingen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Chisinau - EET/EEST + {"Europe/Chisinau", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Copenhagen - CET/CEST + {"Europe/Copenhagen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Dublin - IST/GMT + {"Europe/Dublin", "IST", "GMT", 1, 0, 0, 0, 10, 5, 0, 2, 0, 3, 5, 0, 1, 0, 1, 0}, + // Europe/Gibraltar - CET/CEST + {"Europe/Gibraltar", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Guernsey - GMT/BST + {"Europe/Guernsey", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Europe/Helsinki - EET/EEST + {"Europe/Helsinki", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Isle_of_Man - GMT/BST + {"Europe/Isle_of_Man", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Europe/Istanbul - +03 + {"Europe/Istanbul", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Jersey - GMT/BST + {"Europe/Jersey", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Europe/Kaliningrad - EET + {"Europe/Kaliningrad", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Kiev - EET/EEST + {"Europe/Kiev", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Kirov - MSK + {"Europe/Kirov", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Lisbon - WET/WEST + {"Europe/Lisbon", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Europe/Ljubljana - CET/CEST + {"Europe/Ljubljana", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/London - GMT/BST + {"Europe/London", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // Europe/Luxembourg - CET/CEST + {"Europe/Luxembourg", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Madrid - CET/CEST + {"Europe/Madrid", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Malta - CET/CEST + {"Europe/Malta", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Mariehamn - EET/EEST + {"Europe/Mariehamn", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Minsk - +03 + {"Europe/Minsk", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Monaco - CET/CEST + {"Europe/Monaco", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Moscow - MSK + {"Europe/Moscow", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Oslo - CET/CEST + {"Europe/Oslo", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Paris - CET/CEST + {"Europe/Paris", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Podgorica - CET/CEST + {"Europe/Podgorica", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Prague - CET/CEST + {"Europe/Prague", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Riga - EET/EEST + {"Europe/Riga", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Rome - CET/CEST + {"Europe/Rome", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Samara - +04 + {"Europe/Samara", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/San_Marino - CET/CEST + {"Europe/San_Marino", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Sarajevo - CET/CEST + {"Europe/Sarajevo", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Saratov - +04 + {"Europe/Saratov", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Simferopol - MSK + {"Europe/Simferopol", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Skopje - CET/CEST + {"Europe/Skopje", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Sofia - EET/EEST + {"Europe/Sofia", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Stockholm - CET/CEST + {"Europe/Stockholm", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Tallinn - EET/EEST + {"Europe/Tallinn", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Tirane - CET/CEST + {"Europe/Tirane", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Ulyanovsk - +04 + {"Europe/Ulyanovsk", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Uzhgorod - EET/EEST + {"Europe/Uzhgorod", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Vaduz - CET/CEST + {"Europe/Vaduz", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Vatican - CET/CEST + {"Europe/Vatican", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Vienna - CET/CEST + {"Europe/Vienna", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Vilnius - EET/EEST + {"Europe/Vilnius", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Volgograd - MSK + {"Europe/Volgograd", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Europe/Warsaw - CET/CEST + {"Europe/Warsaw", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Zagreb - CET/CEST + {"Europe/Zagreb", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Europe/Zaporozhye - EET/EEST + {"Europe/Zaporozhye", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // Europe/Zurich - CET/CEST + {"Europe/Zurich", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // Indian/Antananarivo - EAT + {"Indian/Antananarivo", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Chagos - +06 + {"Indian/Chagos", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Christmas - +07 + {"Indian/Christmas", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Cocos - +0630 + {"Indian/Cocos", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Comoro - EAT + {"Indian/Comoro", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Kerguelen - +05 + {"Indian/Kerguelen", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Mahe - +04 + {"Indian/Mahe", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Maldives - +05 + {"Indian/Maldives", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Mauritius - +04 + {"Indian/Mauritius", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Mayotte - EAT + {"Indian/Mayotte", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Indian/Reunion - +04 + {"Indian/Reunion", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Apia - +13 + {"Pacific/Apia", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Auckland - NZST/NZDT + {"Pacific/Auckland", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Pacific/Bougainville - +11 + {"Pacific/Bougainville", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Chatham - +1245/+1345 + {"Pacific/Chatham", "+1245", "+1345", 12, 45, 13, 45, 9, 5, 0, 2, 45, 4, 1, 0, 3, 45, 1, 0}, + // Pacific/Chuuk - +10 + {"Pacific/Chuuk", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Easter - -06/-05 + {"Pacific/Easter", "-06", "-05", -6, 0, -5, 0, 9, 1, 6, 22, 0, 4, 1, 6, 22, 0, 1, 0}, + // Pacific/Efate - +11 + {"Pacific/Efate", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Enderbury - +13 + {"Pacific/Enderbury", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Fakaofo - +13 + {"Pacific/Fakaofo", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Fiji - +12 + {"Pacific/Fiji", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Funafuti - +12 + {"Pacific/Funafuti", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Galapagos - -06 + {"Pacific/Galapagos", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Gambier - -09 + {"Pacific/Gambier", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Guadalcanal - +11 + {"Pacific/Guadalcanal", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Guam - ChST + {"Pacific/Guam", "ChST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Honolulu - HST + {"Pacific/Honolulu", "HST", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Kiritimati - +14 + {"Pacific/Kiritimati", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Kosrae - +11 + {"Pacific/Kosrae", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Kwajalein - +12 + {"Pacific/Kwajalein", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Majuro - +12 + {"Pacific/Majuro", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Marquesas - -0930 + {"Pacific/Marquesas", "-0930", "", -9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Midway - SST + {"Pacific/Midway", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Nauru - +12 + {"Pacific/Nauru", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Niue - -11 + {"Pacific/Niue", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Norfolk - +11/+12 + {"Pacific/Norfolk", "+11", "+12", 11, 0, 12, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // Pacific/Noumea - +11 + {"Pacific/Noumea", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Pago_Pago - SST + {"Pacific/Pago_Pago", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Palau - +09 + {"Pacific/Palau", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Pitcairn - -08 + {"Pacific/Pitcairn", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Pohnpei - +11 + {"Pacific/Pohnpei", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Port_Moresby - +10 + {"Pacific/Port_Moresby", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Rarotonga - -10 + {"Pacific/Rarotonga", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Saipan - ChST + {"Pacific/Saipan", "ChST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Tahiti - -10 + {"Pacific/Tahiti", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Tarawa - +12 + {"Pacific/Tarawa", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Tongatapu - +13 + {"Pacific/Tongatapu", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Wake - +12 + {"Pacific/Wake", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Pacific/Wallis - +12 + {"Pacific/Wallis", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT - GMT + {"Etc/GMT", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-0 - GMT + {"Etc/GMT-0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-1 - +01 + {"Etc/GMT-1", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-2 - +02 + {"Etc/GMT-2", "+02", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-3 - +03 + {"Etc/GMT-3", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-4 - +04 + {"Etc/GMT-4", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-5 - +05 + {"Etc/GMT-5", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-6 - +06 + {"Etc/GMT-6", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-7 - +07 + {"Etc/GMT-7", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-8 - +08 + {"Etc/GMT-8", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-9 - +09 + {"Etc/GMT-9", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-10 - +10 + {"Etc/GMT-10", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-11 - +11 + {"Etc/GMT-11", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-12 - +12 + {"Etc/GMT-12", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-13 - +13 + {"Etc/GMT-13", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT-14 - +14 + {"Etc/GMT-14", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT0 - GMT + {"Etc/GMT0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+0 - GMT + {"Etc/GMT+0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+1 - -01 + {"Etc/GMT+1", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+2 - -02 + {"Etc/GMT+2", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+3 - -03 + {"Etc/GMT+3", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+4 - -04 + {"Etc/GMT+4", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+5 - -05 + {"Etc/GMT+5", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+6 - -06 + {"Etc/GMT+6", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+7 - -07 + {"Etc/GMT+7", "-07", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+8 - -08 + {"Etc/GMT+8", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+9 - -09 + {"Etc/GMT+9", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+10 - -10 + {"Etc/GMT+10", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+11 - -11 + {"Etc/GMT+11", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/GMT+12 - -12 + {"Etc/GMT+12", "-12", "", -12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/UCT - UTC + {"Etc/UCT", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/UTC - UTC + {"Etc/UTC", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/Greenwich - GMT + {"Etc/Greenwich", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/Universal - UTC + {"Etc/Universal", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // Etc/Zulu - UTC + {"Etc/Zulu", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}}; + +s8_t datetime_compare(const datetime_t *dt1, const datetime_t *dt2) { + // Returns: -1 if dt1 < dt2, 0 if equal, 1 if dt1 > dt2 + + if (dt1->year != dt2->year) + return (dt1->year < dt2->year) ? -1 : 1; + if (dt1->month != dt2->month) + return (dt1->month < dt2->month) ? -1 : 1; + if (dt1->day != dt2->day) + return (dt1->day < dt2->day) ? -1 : 1; + if (dt1->hour != dt2->hour) + return (dt1->hour < dt2->hour) ? -1 : 1; + if (dt1->min != dt2->min) + return (dt1->min < dt2->min) ? -1 : 1; + if (dt1->sec != dt2->sec) + return (dt1->sec < dt2->sec) ? -1 : 1; + + return 0; // Equal +} + +void timezone_offset(u16_t timezone_index, datetime_t &dt) { + const timezone_t *selected_timezone = &timezones[timezone_index]; + + if (selected_timezone->has_dst) { + datetime_t dst_start = { + dt.year, + static_cast(selected_timezone->dst_start_month), + static_cast(selected_timezone->dst_start_week), + static_cast(selected_timezone->dst_start_day), + static_cast(selected_timezone->dst_start_hour), + static_cast(selected_timezone->dst_start_min)}; + datetime_t dst_end = {dt.year, + static_cast(selected_timezone->dst_end_month), + static_cast(selected_timezone->dst_end_week), + static_cast(selected_timezone->dst_end_day), + static_cast(selected_timezone->dst_end_hour), + static_cast(selected_timezone->dst_end_min)}; + + if (datetime_compare(&dt, &dst_start) == 1 && + datetime_compare(&dt, &dst_end) == -1) { + dt.hour += selected_timezone->dst_offset_hours; + dt.min += selected_timezone->dst_offset_mins; + } else { + goto std_offset; + } + } else { + std_offset: + dt.hour += selected_timezone->std_offset_hours; + dt.min += selected_timezone->std_offset_mins; + } +}