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

C# 为什么windows 10上缺少某些时区信息?,c#,powershell,timezone,timezone-offset,iana,C#,Powershell,Timezone,Timezone Offset,Iana,在我的本地计算机中,我试图使用以下方法访问IANA时区的偏移值: foreach (var timeZone in TZConvert.KnownIanaTimeZoneNames) { var tzi = TZConvert.GetTimeZoneInfo(timeZone.ToString()); TimeSpan offset = tzi.GetUtcOffset(DateTime.Now); ....... } 行TZConvert.GetTimeZoneInfo(time

在我的本地计算机中,我试图使用以下方法访问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.'
当我用相同的命令在power shell上尝试相同的操作时

PS C:\Users\SajeetharanS> [System.TimeZoneInfo]:FindSystemTimeZoneById(“阿留申标准 使用“1”调用“FindSystemTimeZoneById”时出现异常 参数:“未找到时区ID‘阿留申标准时间’。” 在本地计算机上。”第1行字符:1 +[System.TimeZoneInfo]::FindSystemTimeZoneById(“阿留申标准时间。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],MethodInvocationException +FullyQualifiedErrorId:TimeZoneNotFoundException


为什么某些时区信息丢失?我如何修复它?

特定的时区,
“苏丹标准时间”
。运行代码的计算机可能还没有此更新。请参阅的“如何获取此更新”部分。(基本上,运行Windows update)

就“阿留申标准时间”而言,就是这样。因此,如果计算机没有这个标准时间,那么它的更新就会非常落后

一般来说,时区是一个移动的目标,因为世界各国政府对其标准偏移量和DST政策进行了更改。为了获得准确的本地时间,保持最新信息至关重要

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

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


另外,在大多数情况下,您不想使用
.StandardName
,因为
.StandardName
.DaylightName
.DisplayName
属性是针对安装在操作系统上的语言进行本地化的。有时
.Id
.StandardName
匹配,但即使在英语中也不能保证这一点sh.

在Powershell中,在
(Get TimeZone-ListAvailable).Id
以及
([System.TimeZoneInfo]::GetSystemTimeZones()).StandardName
输出中没有
苏丹
。从
中选择一个(Get TimeZone-ListAvailable | Where对象{$.BaseUtcOffset-eq'02:00:00'-和-not$.SupportsDaylightSavingTime})
;您可以应用变体。