在我的本地计算机上,我尝试使用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
为什么缺少某些时区信息?我该如何解决?
答案 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
匹配,但不保证 - 即使是英语。