将地址映射到Windows时区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将地址映射到Windows时区相关的知识,希望对你有一定的参考价值。

我正在研究如何将地址等位置映射到Windows时区格式。例如,如果地址包含哥本哈根市,那么服务应该将其映射到(UTC+01:00)布鲁塞尔、哥本哈根、马德里、巴黎。

如果地址包含一个靠近维也纳的城市,那么它应该映射到(UTC+01:00)阿姆斯特丹、柏林、伯尔尼、罗马、斯德哥尔摩、维也纳。

我研究了Google的GeoCoding和TimeZone APIs,但它只给我时区的名称,比如 "中欧时间"。

答案

这是一个多步骤的过程。

  1. 确定地点的经纬度坐标。

    • 你提到了谷歌的地理编码API。 这将做得很好,还有其他几个选择。
  2. 从这些坐标中确定时区标识符,用 这些方法中的任何一种.

    • 在大多数情况下,你会收到一个IANA时区标识符,如 "Europe/Vienna". 你提到了谷歌时区API--它将在 timeZoneId 领域( timeZoneName).
  3. 使用IANA时区标识符获得.NET的 TimeZoneInfo 对象。

    • 如果你在非Windows平台(Linux、OSX等)上运行.NET,你可以获得一个 TimeZoneInfo 直接从IANA时区标识符中获取对象。

      // This will work on platforms that use IANA time zones natively
      TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Europe/Vienna");
      
    • 如果你在Windows上运行.NET,或者想把你的应用程序写成在Windows上运行。任何 平台,然后用我的 时区转换器 库来检索 TimeZoneInfo 对象,那么TimeZoneConverter也可以做到这一点。

      // This will work on any platform
      TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Europe/Vienna");
      

如果你真的需要一个Windows时区标识符,那么TimeZoneConverter也可以做到。

string tz = TZConvert.IanaToWindows("Europe/Vienna");
//=> "W. Europe Standard Time"

另外,如果你想得到真正的字符串 "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"那么,。

  • 如果是在Windows上,并且Windows操作系统的locale是: 英文,然后你就可以得到 .DisplayName 来自 TimeZoneInfo 对象。

  • 在所有其他情况下,你可以跳过上面的第3步,只用我的 时区名称 库,它有所有语言的所有显示名称。

    string displayName = TZNames.GetDisplayNameForTimeZone("Europe/Vienna", "en");
    

另外,你可以考虑使用 野田时间 而非 TimeZoneInfo 对象。

以上是关于将地址映射到Windows时区的主要内容,如果未能解决你的问题,请参考以下文章

瞧内核地址空间映射

在 Windows XP 中将内存地址映射到物理模块

ioremap将物理地址映射为虚拟地址问题?

IP地址映射绑定MAC地址

哪些真实平台将硬件端口映射到内存地址?

映射网络磁盘变成本地磁盘