From 9e9950fc16fe4e024feb49f32fae24a4a5358ba2 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Tue, 6 Aug 2024 17:25:32 -0700 Subject: [PATCH] Fix TimeZone Names --- .../src/System/TimeZoneInfo.Unix.cs | 10 ++++--- .../tests/System/TimeZoneInfoTests.cs | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs b/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs index 2524b4fd536066..ea0ece02e33b32 100644 --- a/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs +++ b/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs @@ -220,6 +220,10 @@ public AdjustmentRule[] GetAdjustmentRules() return rulesList.ToArray(); } + private string NameLookupId => + HasIanaId ? Id : + (_equivalentZones is not null && _equivalentZones.Count > 0 ? _equivalentZones[0].Id : (GetAlternativeId(Id, out _) ?? Id)); + private string? PopulateDisplayName() { if (IsUtcAlias(Id)) @@ -231,7 +235,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (GlobalizationMode.Invariant) return displayName; - GetFullValueForDisplayNameField(Id, BaseUtcOffset, ref displayName); + GetFullValueForDisplayNameField(NameLookupId, BaseUtcOffset, ref displayName); return displayName; } @@ -245,7 +249,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (GlobalizationMode.Invariant) return standardDisplayName; - GetStandardDisplayName(Id, ref standardDisplayName); + GetStandardDisplayName(NameLookupId, ref standardDisplayName); return standardDisplayName; } @@ -259,7 +263,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (GlobalizationMode.Invariant) return daylightDisplayName; - GetDaylightDisplayName(Id, ref daylightDisplayName); + GetDaylightDisplayName(NameLookupId, ref daylightDisplayName); return daylightDisplayName; } diff --git a/src/libraries/System.Runtime/tests/System/TimeZoneInfoTests.cs b/src/libraries/System.Runtime/tests/System/TimeZoneInfoTests.cs index 286e18ba3410c7..92353c676b64d4 100644 --- a/src/libraries/System.Runtime/tests/System/TimeZoneInfoTests.cs +++ b/src/libraries/System.Runtime/tests/System/TimeZoneInfoTests.cs @@ -3211,6 +3211,32 @@ public static void TestCustomTimeZonesWithNullNames() Assert.Equal(string.Empty, custom.DisplayName); } + [InlineData("Eastern Standard Time", "America/New_York")] + [InlineData("Central Standard Time", "America/Chicago")] + [InlineData("Mountain Standard Time", "America/Denver")] + [InlineData("Pacific Standard Time", "America/Los_Angeles")] + [ConditionalTheory(nameof(SupportICUAndRemoteExecution))] + public static void TestTimeZoneNames(string windowsId, string ianaId) + { + RemoteExecutor.Invoke(static (wId, iId) => + { + TimeZoneInfo info1, info2; + if (PlatformDetection.IsWindows) + { + info1 = TimeZoneInfo.FindSystemTimeZoneById(iId); + info2 = TimeZoneInfo.FindSystemTimeZoneById(wId); + } + else + { + info1 = TimeZoneInfo.FindSystemTimeZoneById(wId); + info2 = TimeZoneInfo.FindSystemTimeZoneById(iId); + } + Assert.Equal(info1.StandardName, info2.StandardName); + Assert.Equal(info1.DaylightName, info2.DaylightName); + Assert.Equal(info1.DisplayName, info2.DisplayName); + }, windowsId, ianaId).Dispose(); + } + private static bool IsEnglishUILanguage => CultureInfo.CurrentUICulture.Name.Length == 0 || CultureInfo.CurrentUICulture.TwoLetterISOLanguageName == "en"; private static bool IsEnglishUILanguageAndRemoteExecutorSupported => IsEnglishUILanguage && RemoteExecutor.IsSupported;