Add more time zone conversions

This commit is contained in:
Noi 2023-01-14 19:52:22 -08:00
parent 362d288424
commit da34f5c6a6

View file

@ -42,9 +42,309 @@ public class CommandsBase : InteractionModuleBase<ShardedInteractionContext> {
/// Checks given time zone input. Returns a valid string for use with NodaTime, or null. /// Checks given time zone input. Returns a valid string for use with NodaTime, or null.
/// </summary> /// </summary>
protected static string? ParseTimeZone(string tzinput) { protected static string? ParseTimeZone(string tzinput) {
if (tzinput.Equals("Asia/Calcutta", StringComparison.OrdinalIgnoreCase)) tzinput = "Asia/Kolkata"; if (!_tzNameMap.TryGetValue(tzinput, out tzinput!)) return null;
if (_tzNameMap.TryGetValue(tzinput, out var name)) return name;
return null; // We directly convert between -some- aliases in an effort to clean up the list display,
// inadvertently displaying the same region in two separate areas and causing confusion
// or otherwise replacing much longer names with shorter aliases.
// Source: https://nodatime.org/TimeZones. Version referenced: 2022g.
string name;
switch (tzinput) {
case "Iceland":
name = "Atlantic/Reykjavik";
break;
case "Egypt":
name = "Africa/Cairo";
break;
case "Libya":
name = "Africa/Tripoli";
break;
case "America/Atka":
case "US/Aleutian":
name = "America/Adak";
break;
case "US/Alaska":
name = "America/Anchorage";
break;
case "America/Argentina/Buenos_Aires":
name = "America/Buenos_Aires";
break;
case "America/Argentina/Catamarca":
case "America/Argentina/ComodRivadavia":
name = "America/Catamarca";
break;
case "America/Argentina/Cordoba":
case "America/Rosario":
name = "America/Cordoba";
break;
case "America/Argentina/Jujuy":
name = "America/Jujuy";
break;
case "America/Argentina/Mendoza":
name = "America/Mendoza";
break;
case "US/Central":
name = "America/Chicago";
break;
case "America/Shiprock":
case "Navajo":
case "US/Mountain":
name = "America/Denver";
break;
case "US/Michigan":
name = "America/Detroit";
break;
case "Canada/Mountain":
name = "America/Edmonton";
break;
case "Canada/Atlantic":
name = "America/Halifax";
break;
case "Cuba":
name = "America/Havana";
break;
case "America/Fort_Wayne":
case "America/Indianapolis":
case "US/East-Indiana":
name = "America/Indiana/Indanapolis";
break;
case "America/Knox_IN":
case "US/Indiana-Starke":
name = "America/Indiana/Knox";
break;
case "America/Pangnirtung":
name = "America/Iqaluit";
break;
case "Jamaica":
name = "America/Jamaica";
break;
case "America/Kentucky/Louisville":
name = "America/Louisville";
break;
case "US/Pacific":
name = "America/Los_Angeles";
break;
case "Brazil/West":
name = "America/Manaus";
break;
case "Mexico/BajaSur":
name = "America/Mazatlan";
break;
case "Mexico/General":
name = "America/Mexico_City";
break;
case "US/Eastern":
name = "America/New_York";
break;
case "Brazil/DeNoronha":
name = "America/Noronha";
break;
case "America/Godthab":
name = "America/Nuuk";
break;
case "America/Creston":
case "US/Arizona":
name = "America/Phoenix";
break;
case "Canada/Saskatchewan":
name = "America/Regina";
break;
case "America/Porto_Acre":
case "Brazil/Acre":
name = "America/Rio_Branco";
break;
case "Chile/Continental":
name = "America/Santiago";
break;
case "Brazil/East":
name = "America/Sao_Paulo";
break;
case "Canada/Newfoundland":
name = "America/St_Johns";
break;
case "America/Ensenada":
case "America/Santa_Isabel":
case "Mexico/BajaNorte":
name = "America/Tijuana";
break;
case "America/Montreal":
case "America/Nipigon":
case "America/Thunder_Bay":
case "Canada/Eastern":
name = "America/Toronto";
break;
case "Canada/Pacific":
name = "America/Vancouver";
break;
case "Canada/Yukon":
name = "America/Whitehorse";
break;
case "America/Rainy_River":
case "Canada/Central":
name = "America/Winnipeg";
break;
case "Asia/Ashkhabad":
name = "Asia/Ashgabat";
break;
case "Asia/Dacca":
name = "Asia/Dhaka";
break;
case "Asia/Saigon":
name = "Asia/Ho_Chi_Minh";
break;
case "Hongkong":
name = "Asia/Hong_Kong";
break;
case "Asia/Tel_Aviv":
case "Israel":
name = "Asia/Jerusalem";
break;
case "Asia/Katmandu":
name = "Asia/Kathmandu";
break;
case "Asia/Calcutta":
name = "Asia/Kolkata";
break;
case "Asia/Macao":
name = "Asia/Macau";
break;
case "Europe/Nicosia":
name = "Asia/Nicosia";
break;
case "ROK":
name = "Asia/Seoul";
break;
case "Asia/Chongqing":
case "Asia/Chungking":
case "Asia/Harbin":
case "PRC":
name = "Asia/Shanghai";
break;
case "Singapore":
name = "Asia/Singapore";
break;
case "ROC":
name = "Asia/Taipei";
break;
case "Iran":
name = "Asia/Tehran";
break;
case "Asia/Thimbu":
name = "Asia/Thimphu";
break;
case "Tokyo":
name = "Asia/Tokyo";
break;
case "Asia/Ulan_Bator":
name = "Asia/Ulaanbaatar";
break;
case "Asia/Rangoon":
name = "Asia/Yangon";
break;
case "Atlantic/Faeroe":
name = "Atlantic/Faroe";
break;
case "Australia/South":
name = "Australia/Adelaide";
break;
case "Australia/Queensland":
name = "Australia/Brisbane";
break;
case "Australia/Yancowinna":
name = "Australia/Brorken_Hill";
break;
case "Australia/North":
name = "Australia/Darwin";
break;
case "Australia/Currie":
case "Australia/Tasmania":
name = "Australia/Hobart";
break;
case "Australia/LHI":
name = "Australia/Lord_Howe";
break;
case "Australia/Victoria":
name = "Australia/Melbourne";
break;
case "Australia/West":
name = "Australia/Perth";
break;
case "Australia/ACT":
case "Australia/Canberra":
case "Australia/NSW":
name = "Australia/Sydney";
break;
case "Etc/Greenwich":
case "Greenwich":
name = "Etc/GMT";
break;
case "Etc/UCT":
case "Etc/Universal":
case "Etc/Zulu":
case "UCT":
case "UTC":
case "Universal":
case "Zulu":
name = "Etc/UTC";
break;
case "Eire":
name = "Europe/Dublin";
break;
case "Asia/Istanbul":
case "Turkey":
name = "Europe/Istanbul";
break;
case "Europe/Kiev":
case "Europe/Uzhgorod":
case "Europe/Zaporozhye":
name = "Europe/Kyiv";
break;
case "Portugal":
name = "Europe/Lisbon";
break;
case "Europe/Belfast":
case "GB":
case "GB-Eire":
name = "Europe/London";
break;
case "W-SU":
name = "Europe/Moscow";
break;
case "Poland":
name = "Europe/Warsaw";
break;
case "Europe/Busingen":
name = "Europe/Zurich";
break;
case "NZ":
name = "Pacific/Auckland";
break;
case "NZ-CHAT":
name = "Pacific/Chatham";
break;
case "Chile/EasterIsland":
name = "Pacific/Easter";
break;
case "US/Hawaii":
name = "Pacific/Honolulu";
break;
case "Kwajalein":
name = "Pacific/Kwajalein";
break;
case "Pacific/Samoa":
case "US/Samoa":
name = "Pacific/Pago_Pago";
break;
default:
name = tzinput;
break;
}
if (!_tzNameMap.TryGetValue(name, out _)) {
// TODO proper logging (it's not exposed, so can't do it as-is)
Console.WriteLine($"!!! Our replacement for {tzinput} (to {name}) failed! Will use original input...");
return tzinput;
}
return name;
} }
/// <summary> /// <summary>