Skip to content

Commit 5807052

Browse files
authored
Fix TimeZone Names (#106056)
1 parent 58d9176 commit 5807052

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

src/libraries/System.Private.CoreLib/src/System/TimeZoneInfo.Unix.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ public AdjustmentRule[] GetAdjustmentRules()
220220
return rulesList.ToArray();
221221
}
222222

223+
private string NameLookupId =>
224+
HasIanaId ? Id :
225+
(_equivalentZones is not null && _equivalentZones.Count > 0 ? _equivalentZones[0].Id : (GetAlternativeId(Id, out _) ?? Id));
226+
223227
private string? PopulateDisplayName()
224228
{
225229
if (IsUtcAlias(Id))
@@ -231,7 +235,7 @@ public AdjustmentRule[] GetAdjustmentRules()
231235
if (GlobalizationMode.Invariant)
232236
return displayName;
233237

234-
GetFullValueForDisplayNameField(Id, BaseUtcOffset, ref displayName);
238+
GetFullValueForDisplayNameField(NameLookupId, BaseUtcOffset, ref displayName);
235239

236240
return displayName;
237241
}
@@ -245,7 +249,7 @@ public AdjustmentRule[] GetAdjustmentRules()
245249
if (GlobalizationMode.Invariant)
246250
return standardDisplayName;
247251

248-
GetStandardDisplayName(Id, ref standardDisplayName);
252+
GetStandardDisplayName(NameLookupId, ref standardDisplayName);
249253

250254
return standardDisplayName;
251255
}
@@ -259,7 +263,7 @@ public AdjustmentRule[] GetAdjustmentRules()
259263
if (GlobalizationMode.Invariant)
260264
return daylightDisplayName;
261265

262-
GetDaylightDisplayName(Id, ref daylightDisplayName);
266+
GetDaylightDisplayName(NameLookupId, ref daylightDisplayName);
263267

264268
return daylightDisplayName;
265269
}

src/libraries/System.Runtime/tests/System/TimeZoneInfoTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3211,6 +3211,32 @@ public static void TestCustomTimeZonesWithNullNames()
32113211
Assert.Equal(string.Empty, custom.DisplayName);
32123212
}
32133213

3214+
[InlineData("Eastern Standard Time", "America/New_York")]
3215+
[InlineData("Central Standard Time", "America/Chicago")]
3216+
[InlineData("Mountain Standard Time", "America/Denver")]
3217+
[InlineData("Pacific Standard Time", "America/Los_Angeles")]
3218+
[ConditionalTheory(nameof(SupportICUAndRemoteExecution))]
3219+
public static void TestTimeZoneNames(string windowsId, string ianaId)
3220+
{
3221+
RemoteExecutor.Invoke(static (wId, iId) =>
3222+
{
3223+
TimeZoneInfo info1, info2;
3224+
if (PlatformDetection.IsWindows)
3225+
{
3226+
info1 = TimeZoneInfo.FindSystemTimeZoneById(iId);
3227+
info2 = TimeZoneInfo.FindSystemTimeZoneById(wId);
3228+
}
3229+
else
3230+
{
3231+
info1 = TimeZoneInfo.FindSystemTimeZoneById(wId);
3232+
info2 = TimeZoneInfo.FindSystemTimeZoneById(iId);
3233+
}
3234+
Assert.Equal(info1.StandardName, info2.StandardName);
3235+
Assert.Equal(info1.DaylightName, info2.DaylightName);
3236+
Assert.Equal(info1.DisplayName, info2.DisplayName);
3237+
}, windowsId, ianaId).Dispose();
3238+
}
3239+
32143240
private static bool IsEnglishUILanguage => CultureInfo.CurrentUICulture.Name.Length == 0 || CultureInfo.CurrentUICulture.TwoLetterISOLanguageName == "en";
32153241

32163242
private static bool IsEnglishUILanguageAndRemoteExecutorSupported => IsEnglishUILanguage && RemoteExecutor.IsSupported;

0 commit comments

Comments
 (0)