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

时间:2017-12-15 01:37:06

标签: c# powershell timezone timezone-offset iana

在我的本地计算机上,我尝试使用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(“阿留申标准版”   时间“)用”1“调用”FindSystemTimeZoneById“的异常   参数:“未找到时区ID'阿留申标准时间'   在本地计算机上。“在线:1个字符:1   + [System.TimeZoneInfo] :: FindSystemTimeZoneById(“阿留申标准时间......   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:TimeZoneNotFoundException

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

1 个答案:

答案 0 :(得分:2)

特定时区"Sudan Standard Time" 只是 released by Microsoft on December 12, 2017。运行代码的计算机可能还没有此更新。请参阅the support document的“如何获取此更新”部分。 (基本上,运行Windows Update)。

"Aleutian Standard Time"而言,那是released in June 2016。因此,如果计算机没有,那么完全后面有更新。

总的来说,时区是一个不断变化的目标,因为世界各国政府都在改变其标准抵消和DST政策。为了获得准确的当地时间,保持最新的更新至关重要。

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

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

此外,在大多数情况下,您不希望使用.StandardName,因为.StandardName.DaylightName.DisplayName属性已本地化用于OS上安装的语言。有时.Id.StandardName匹配,但不保证 - 即使是英语。