为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 TimeZoneInfo.FindSystemTimeZoneById("UTC")

为什么 TimeZoneInfo.FindSystemTimeZoneById("UTC")

C#
桃花长相依 2022-12-31 10:34:03
我正在尝试为我的 Umbraco V8 包创建一个 APIcontroller。API 工作正常,但我只希望我的后台 AngularControllers 能够访问 API。我希望创建一个如本答案https://stackoverflow.com/a/30573590/11409365中所述的属性。这样只有本地机器可以访问 API。我认为这不相关,但这是我的 APIController 中的代码    public class PackageApiController : UmbracoApiController    {        [HttpGet]        public string GetString()        {            return "Test";        }     }但是我应该在哪里添加我的 WebApiConfig 类以及如何确保 ApiController 使用这个类?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

你是两个不同的结果,因为根据GetSystemTimeZones()TimeZoneInfo.cs的实现将尝试查找和收集时区数据。Registry.LocalMachine

FindSystemTimeZoneById的情况下,它具有如下条件。如果不匹配,它将从Registry.LocalMachine.

if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) { 
   return TimeZoneInfo.Utc;
}


查看完整回答
反对 回复 2022-12-31
?
慕慕森

TA贡献1856条经验 获得超17个赞

答案可在以下参考资料中找到FindSystemTimeZoneById


// Special case for Utc as it will not exist in the dictionary with the rest

// of the system time zones.  There is no need to do this check for Local.Id

// since Local is a real time zone that exists in the dictionary cache

if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {

    return TimeZoneInfo.Utc;

}

它所指的字典是从 填充的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones,并且是GetSystemTimeZones返回的内容。


但是,我不认为评论和逻辑是正确的,因为我的 Windows 10 build 1803 机器在上述注册表路径中有一个“UTC”条目(假设您的计算机具有相同的条目)。看起来这在早期版本的 Windows 中可能是正确的,但也许不再是这样了 -已在 corefx 存储库中提交错误以获得清晰度



查看完整回答
反对 回复 2022-12-31
?
达令说

TA贡献1821条经验 获得超6个赞

这段代码是很久以前写的,在那段时间假设 Utc 没有在机器上枚举,也不会存储在本地字典中。我同意现在情况并非如此。虽然我没有看到这会导致真正的问题,因为两个 Utc 创建的对象都会正确运行,但我认为最好修复它并确保我们使用一个 Utc 对象。

@Ian Kemp,感谢您在 corefx 存储库中打开问题。我们将在 .NET Core 的未来版本中处理这个问题。


查看完整回答
反对 回复 2022-12-31
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信