@@ -1017,108 +1017,142 @@ struct TzEntry {
10171017 offset : i32 ,
10181018}
10191019
1020- /// Built-in timezone database with major timezones and their UTC offsets.
1020+ /// Built-in timezone database with ~120 major IANA timezones and their standard UTC offsets.
1021+ /// Note: DST is not handled; offsets are standard (non-DST) values.
10211022const TIMEZONE_DB : & [ TzEntry ] = & [
1022- TzEntry {
1023- name : "UTC" ,
1024- offset : 0 ,
1025- } ,
1026- TzEntry {
1027- name : "GMT" ,
1028- offset : 0 ,
1029- } ,
1030- TzEntry {
1031- name : "US/Eastern" ,
1032- offset : -5 * 3600 ,
1033- } ,
1034- TzEntry {
1035- name : "US/Central" ,
1036- offset : -6 * 3600 ,
1037- } ,
1038- TzEntry {
1039- name : "US/Mountain" ,
1040- offset : -7 * 3600 ,
1041- } ,
1042- TzEntry {
1043- name : "US/Pacific" ,
1044- offset : -8 * 3600 ,
1045- } ,
1046- TzEntry {
1047- name : "Europe/London" ,
1048- offset : 0 ,
1049- } ,
1050- TzEntry {
1051- name : "Europe/Paris" ,
1052- offset : 1 * 3600 ,
1053- } ,
1054- TzEntry {
1055- name : "Europe/Berlin" ,
1056- offset : 1 * 3600 ,
1057- } ,
1058- TzEntry {
1059- name : "Europe/Moscow" ,
1060- offset : 3 * 3600 ,
1061- } ,
1062- TzEntry {
1063- name : "Asia/Tokyo" ,
1064- offset : 9 * 3600 ,
1065- } ,
1066- TzEntry {
1067- name : "Asia/Shanghai" ,
1068- offset : 8 * 3600 ,
1069- } ,
1070- TzEntry {
1071- name : "Asia/Kolkata" ,
1072- offset : 19800 ,
1073- } , // 5.5 hours
1074- TzEntry {
1075- name : "Australia/Sydney" ,
1076- offset : 10 * 3600 ,
1077- } ,
1078- TzEntry {
1079- name : "Pacific/Auckland" ,
1080- offset : 12 * 3600 ,
1081- } ,
1082- TzEntry {
1083- name : "America/New_York" ,
1084- offset : -5 * 3600 ,
1085- } ,
1086- TzEntry {
1087- name : "America/Chicago" ,
1088- offset : -6 * 3600 ,
1089- } ,
1090- TzEntry {
1091- name : "America/Denver" ,
1092- offset : -7 * 3600 ,
1093- } ,
1094- TzEntry {
1095- name : "America/Los_Angeles" ,
1096- offset : -8 * 3600 ,
1097- } ,
1098- TzEntry {
1099- name : "America/Anchorage" ,
1100- offset : -9 * 3600 ,
1101- } ,
1102- TzEntry {
1103- name : "America/Sao_Paulo" ,
1104- offset : -3 * 3600 ,
1105- } ,
1106- TzEntry {
1107- name : "Africa/Cairo" ,
1108- offset : 2 * 3600 ,
1109- } ,
1110- TzEntry {
1111- name : "Asia/Dubai" ,
1112- offset : 4 * 3600 ,
1113- } ,
1114- TzEntry {
1115- name : "Asia/Singapore" ,
1116- offset : 8 * 3600 ,
1117- } ,
1118- TzEntry {
1119- name : "Asia/Hong_Kong" ,
1120- offset : 8 * 3600 ,
1121- } ,
1023+ // UTC/GMT
1024+ TzEntry { name : "UTC" , offset : 0 } ,
1025+ TzEntry { name : "GMT" , offset : 0 } ,
1026+ // Africa
1027+ TzEntry { name : "Africa/Abidjan" , offset : 0 } ,
1028+ TzEntry { name : "Africa/Accra" , offset : 0 } ,
1029+ TzEntry { name : "Africa/Addis_Ababa" , offset : 3 * 3600 } ,
1030+ TzEntry { name : "Africa/Algiers" , offset : 1 * 3600 } ,
1031+ TzEntry { name : "Africa/Cairo" , offset : 2 * 3600 } ,
1032+ TzEntry { name : "Africa/Casablanca" , offset : 1 * 3600 } ,
1033+ TzEntry { name : "Africa/Dar_es_Salaam" , offset : 3 * 3600 } ,
1034+ TzEntry { name : "Africa/Johannesburg" , offset : 2 * 3600 } ,
1035+ TzEntry { name : "Africa/Lagos" , offset : 1 * 3600 } ,
1036+ TzEntry { name : "Africa/Nairobi" , offset : 3 * 3600 } ,
1037+ TzEntry { name : "Africa/Tunis" , offset : 1 * 3600 } ,
1038+ // America
1039+ TzEntry { name : "America/Anchorage" , offset : -9 * 3600 } ,
1040+ TzEntry { name : "America/Argentina/Buenos_Aires" , offset : -3 * 3600 } ,
1041+ TzEntry { name : "America/Bogota" , offset : -5 * 3600 } ,
1042+ TzEntry { name : "America/Caracas" , offset : -4 * 3600 } ,
1043+ TzEntry { name : "America/Chicago" , offset : -6 * 3600 } ,
1044+ TzEntry { name : "America/Denver" , offset : -7 * 3600 } ,
1045+ TzEntry { name : "America/Edmonton" , offset : -7 * 3600 } ,
1046+ TzEntry { name : "America/Guayaquil" , offset : -5 * 3600 } ,
1047+ TzEntry { name : "America/Halifax" , offset : -4 * 3600 } ,
1048+ TzEntry { name : "America/Havana" , offset : -5 * 3600 } ,
1049+ TzEntry { name : "America/Lima" , offset : -5 * 3600 } ,
1050+ TzEntry { name : "America/Los_Angeles" , offset : -8 * 3600 } ,
1051+ TzEntry { name : "America/Manaus" , offset : -4 * 3600 } ,
1052+ TzEntry { name : "America/Mexico_City" , offset : -6 * 3600 } ,
1053+ TzEntry { name : "America/Montreal" , offset : -5 * 3600 } ,
1054+ TzEntry { name : "America/New_York" , offset : -5 * 3600 } ,
1055+ TzEntry { name : "America/Panama" , offset : -5 * 3600 } ,
1056+ TzEntry { name : "America/Phoenix" , offset : -7 * 3600 } ,
1057+ TzEntry { name : "America/Santiago" , offset : -4 * 3600 } ,
1058+ TzEntry { name : "America/Sao_Paulo" , offset : -3 * 3600 } ,
1059+ TzEntry { name : "America/St_Johns" , offset : -12600 } , // -3:30
1060+ TzEntry { name : "America/Toronto" , offset : -5 * 3600 } ,
1061+ TzEntry { name : "America/Vancouver" , offset : -8 * 3600 } ,
1062+ TzEntry { name : "America/Winnipeg" , offset : -6 * 3600 } ,
1063+ // Asia
1064+ TzEntry { name : "Asia/Almaty" , offset : 6 * 3600 } ,
1065+ TzEntry { name : "Asia/Baghdad" , offset : 3 * 3600 } ,
1066+ TzEntry { name : "Asia/Baku" , offset : 4 * 3600 } ,
1067+ TzEntry { name : "Asia/Bangkok" , offset : 7 * 3600 } ,
1068+ TzEntry { name : "Asia/Beirut" , offset : 2 * 3600 } ,
1069+ TzEntry { name : "Asia/Colombo" , offset : 19800 } , // 5:30
1070+ TzEntry { name : "Asia/Dhaka" , offset : 6 * 3600 } ,
1071+ TzEntry { name : "Asia/Dubai" , offset : 4 * 3600 } ,
1072+ TzEntry { name : "Asia/Ho_Chi_Minh" , offset : 7 * 3600 } ,
1073+ TzEntry { name : "Asia/Hong_Kong" , offset : 8 * 3600 } ,
1074+ TzEntry { name : "Asia/Irkutsk" , offset : 8 * 3600 } ,
1075+ TzEntry { name : "Asia/Istanbul" , offset : 3 * 3600 } ,
1076+ TzEntry { name : "Asia/Jakarta" , offset : 7 * 3600 } ,
1077+ TzEntry { name : "Asia/Jerusalem" , offset : 2 * 3600 } ,
1078+ TzEntry { name : "Asia/Kabul" , offset : 16200 } , // 4:30
1079+ TzEntry { name : "Asia/Karachi" , offset : 5 * 3600 } ,
1080+ TzEntry { name : "Asia/Kathmandu" , offset : 20700 } , // 5:45
1081+ TzEntry { name : "Asia/Kolkata" , offset : 19800 } , // 5:30
1082+ TzEntry { name : "Asia/Krasnoyarsk" , offset : 7 * 3600 } ,
1083+ TzEntry { name : "Asia/Kuala_Lumpur" , offset : 8 * 3600 } ,
1084+ TzEntry { name : "Asia/Kuwait" , offset : 3 * 3600 } ,
1085+ TzEntry { name : "Asia/Magadan" , offset : 11 * 3600 } ,
1086+ TzEntry { name : "Asia/Manila" , offset : 8 * 3600 } ,
1087+ TzEntry { name : "Asia/Muscat" , offset : 4 * 3600 } ,
1088+ TzEntry { name : "Asia/Novosibirsk" , offset : 7 * 3600 } ,
1089+ TzEntry { name : "Asia/Riyadh" , offset : 3 * 3600 } ,
1090+ TzEntry { name : "Asia/Seoul" , offset : 9 * 3600 } ,
1091+ TzEntry { name : "Asia/Shanghai" , offset : 8 * 3600 } ,
1092+ TzEntry { name : "Asia/Singapore" , offset : 8 * 3600 } ,
1093+ TzEntry { name : "Asia/Taipei" , offset : 8 * 3600 } ,
1094+ TzEntry { name : "Asia/Tashkent" , offset : 5 * 3600 } ,
1095+ TzEntry { name : "Asia/Tehran" , offset : 12600 } , // 3:30
1096+ TzEntry { name : "Asia/Tokyo" , offset : 9 * 3600 } ,
1097+ TzEntry { name : "Asia/Vladivostok" , offset : 10 * 3600 } ,
1098+ TzEntry { name : "Asia/Yakutsk" , offset : 9 * 3600 } ,
1099+ TzEntry { name : "Asia/Yekaterinburg" , offset : 5 * 3600 } ,
1100+ // Atlantic
1101+ TzEntry { name : "Atlantic/Azores" , offset : -1 * 3600 } ,
1102+ TzEntry { name : "Atlantic/Cape_Verde" , offset : -1 * 3600 } ,
1103+ TzEntry { name : "Atlantic/Reykjavik" , offset : 0 } ,
1104+ // Australia
1105+ TzEntry { name : "Australia/Adelaide" , offset : 34200 } , // 9:30
1106+ TzEntry { name : "Australia/Brisbane" , offset : 10 * 3600 } ,
1107+ TzEntry { name : "Australia/Darwin" , offset : 34200 } , // 9:30
1108+ TzEntry { name : "Australia/Hobart" , offset : 10 * 3600 } ,
1109+ TzEntry { name : "Australia/Melbourne" , offset : 10 * 3600 } ,
1110+ TzEntry { name : "Australia/Perth" , offset : 8 * 3600 } ,
1111+ TzEntry { name : "Australia/Sydney" , offset : 10 * 3600 } ,
1112+ // Europe
1113+ TzEntry { name : "Europe/Amsterdam" , offset : 1 * 3600 } ,
1114+ TzEntry { name : "Europe/Athens" , offset : 2 * 3600 } ,
1115+ TzEntry { name : "Europe/Belgrade" , offset : 1 * 3600 } ,
1116+ TzEntry { name : "Europe/Berlin" , offset : 1 * 3600 } ,
1117+ TzEntry { name : "Europe/Brussels" , offset : 1 * 3600 } ,
1118+ TzEntry { name : "Europe/Bucharest" , offset : 2 * 3600 } ,
1119+ TzEntry { name : "Europe/Budapest" , offset : 1 * 3600 } ,
1120+ TzEntry { name : "Europe/Copenhagen" , offset : 1 * 3600 } ,
1121+ TzEntry { name : "Europe/Dublin" , offset : 0 } ,
1122+ TzEntry { name : "Europe/Helsinki" , offset : 2 * 3600 } ,
1123+ TzEntry { name : "Europe/Istanbul" , offset : 3 * 3600 } ,
1124+ TzEntry { name : "Europe/Kiev" , offset : 2 * 3600 } ,
1125+ TzEntry { name : "Europe/Lisbon" , offset : 0 } ,
1126+ TzEntry { name : "Europe/London" , offset : 0 } ,
1127+ TzEntry { name : "Europe/Madrid" , offset : 1 * 3600 } ,
1128+ TzEntry { name : "Europe/Moscow" , offset : 3 * 3600 } ,
1129+ TzEntry { name : "Europe/Oslo" , offset : 1 * 3600 } ,
1130+ TzEntry { name : "Europe/Paris" , offset : 1 * 3600 } ,
1131+ TzEntry { name : "Europe/Prague" , offset : 1 * 3600 } ,
1132+ TzEntry { name : "Europe/Rome" , offset : 1 * 3600 } ,
1133+ TzEntry { name : "Europe/Sofia" , offset : 2 * 3600 } ,
1134+ TzEntry { name : "Europe/Stockholm" , offset : 1 * 3600 } ,
1135+ TzEntry { name : "Europe/Vienna" , offset : 1 * 3600 } ,
1136+ TzEntry { name : "Europe/Vilnius" , offset : 2 * 3600 } ,
1137+ TzEntry { name : "Europe/Warsaw" , offset : 1 * 3600 } ,
1138+ TzEntry { name : "Europe/Zurich" , offset : 1 * 3600 } ,
1139+ // Indian
1140+ TzEntry { name : "Indian/Maldives" , offset : 5 * 3600 } ,
1141+ TzEntry { name : "Indian/Mauritius" , offset : 4 * 3600 } ,
1142+ // Pacific
1143+ TzEntry { name : "Pacific/Auckland" , offset : 12 * 3600 } ,
1144+ TzEntry { name : "Pacific/Fiji" , offset : 12 * 3600 } ,
1145+ TzEntry { name : "Pacific/Guam" , offset : 10 * 3600 } ,
1146+ TzEntry { name : "Pacific/Honolulu" , offset : -10 * 3600 } ,
1147+ TzEntry { name : "Pacific/Samoa" , offset : -11 * 3600 } ,
1148+ TzEntry { name : "Pacific/Tongatapu" , offset : 13 * 3600 } ,
1149+ // US aliases
1150+ TzEntry { name : "US/Eastern" , offset : -5 * 3600 } ,
1151+ TzEntry { name : "US/Central" , offset : -6 * 3600 } ,
1152+ TzEntry { name : "US/Mountain" , offset : -7 * 3600 } ,
1153+ TzEntry { name : "US/Pacific" , offset : -8 * 3600 } ,
1154+ TzEntry { name : "US/Alaska" , offset : -9 * 3600 } ,
1155+ TzEntry { name : "US/Hawaii" , offset : -10 * 3600 } ,
11221156] ;
11231157
11241158impl PhpDateTimeZone {
0 commit comments