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 4951f7829e7943..a5a3412b26b653 100644 --- a/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs +++ b/src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs @@ -224,6 +224,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)) @@ -239,7 +243,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (!GlobalizationMode.Hybrid) return displayName; #endif - GetFullValueForDisplayNameField(Id, BaseUtcOffset, ref displayName); + GetFullValueForDisplayNameField(NameLookupId, BaseUtcOffset, ref displayName); return displayName; } @@ -257,7 +261,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (!GlobalizationMode.Hybrid) return standardDisplayName; #endif - GetStandardDisplayName(Id, ref standardDisplayName); + GetStandardDisplayName(NameLookupId, ref standardDisplayName); return standardDisplayName; } @@ -275,7 +279,7 @@ public AdjustmentRule[] GetAdjustmentRules() if (!GlobalizationMode.Hybrid) return daylightDisplayName; #endif - GetDaylightDisplayName(Id, ref daylightDisplayName); + GetDaylightDisplayName(NameLookupId, ref daylightDisplayName); return daylightDisplayName; } diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/TimeZoneInfoTests.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/TimeZoneInfoTests.cs index 16818b51ab89c7..2ff5d459fdb50d 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/TimeZoneInfoTests.cs +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/TimeZoneInfoTests.cs @@ -3222,6 +3222,33 @@ 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;