为什么 windows 10 缺少某些时区信息?

Why some time zone information are missing on windows 10?

在我的本地计算机中,我正在尝试使用 converter 访问 IANA 时区的偏移值,如下所示,

foreach (var timeZone in TZConvert.KnownIanaTimeZoneNames)
{
  var tzi = TZConvert.GetTimeZoneInfo(timeZone.ToString());
  TimeSpan offset = tzi.GetUtcOffset(DateTime.Now);
  .......
}

TZConvert.GetTimeZoneInfo(timeZone.ToString()) 有时会抛出错误

System.TimeZoneNotFoundException: 'The time zone ID 'Sudan Standard Time' was not found on the local computer.'

当我尝试使用相同的命令打开电源时 shell,

PS C:\Users\SajeetharanS> [System.TimeZoneInfo]::FindSystemTimeZoneById("Aleutian Standard Time") Exception calling "FindSystemTimeZoneById" with "1" argument(s): "The time zone ID 'Aleutian Standard Time' was not found on the local computer." At line:1 char:1 + [System.TimeZoneInfo]::FindSystemTimeZoneById("Aleutian Standard Time ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : TimeZoneNotFoundException

为什么缺少一些时区信息?我该如何解决?

特定时区,"Sudan Standard Time" 只是 released by Microsoft on December 12, 2017. It is likely that the computer where the code is running does not yet have this update. See the "How to get this update" section of the support document。 (基本上,运行 Windows更新)。

至于 "Aleutian Standard Time",那是 released in June 2016。因此,如果计算机没有,那么它 相当 落后于更新。

总的来说,时区是一个移动的目标,因为世界各国政府都在改变他们的标准偏移量和 DST 政策。为了获得准确的当地时间,及时了解更新至关重要。

您正在使用的我的 TimeZoneConverter 库假定计算机是最新的。当 Microsoft 和 IANA 发布时区更改时,我会推送更新,但我不会尝试协调特定计算机是否安装了时区。

如果您试图列出计算机上的所有时区,最好使用内置的 TimeZoneInfo.GetSystemTimeZones() 方法,然后使用每个时区的 .Id 属性。

此外,在大多数情况下,您不想使用 .StandardName,因为 .StandardName.DaylightName.DisplayName 属性是 localized 用于 OS 上安装的语言。有时 .Id.StandardName 匹配,但这并不能保证 - 即使是英文。