C# 将地址映射到Windows时区

C# 将地址映射到Windows时区,c#,timezone,google-api-timezone,C#,Timezone,Google Api Timezone,我正在研究将地址等位置映射为Windows时区格式。例如,如果地址包含哥本哈根市,则服务应将其映射到(UTC+01:00)布鲁塞尔、哥本哈根、马德里、巴黎 如果地址包含靠近维也纳的城市,则应将其映射到(UTC+01:00)阿姆斯特丹、柏林、伯尔尼、罗马、斯德哥尔摩、维也纳 我研究过谷歌的地理编码和时区API,但它只给出了时区的名称,比如“中欧时间” 这是一个多步骤的过程: 确定位置的纬度和经度坐标 你提到了谷歌的地理编码API。这样就可以了,还有其他几种选择 使用这些坐标确定时区标识符 在

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

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


我研究过谷歌的地理编码和时区API,但它只给出了时区的名称,比如“中欧时间”

这是一个多步骤的过程:

  • 确定位置的纬度和经度坐标

    • 你提到了谷歌的地理编码API。这样就可以了,还有其他几种选择
  • 使用这些坐标确定时区标识符

    • 在大多数情况下,您将收到IANA时区标识符,例如
      “欧洲/维也纳”
      。您提到了Google时区API,它在
      timeZoneId
      字段中返回此值(而不是
      timeZoneName
  • 使用IANA时区标识符获取.NET
    TimeZoneInfo
    对象

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

      // This will work on platforms that use IANA time zones natively
      TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Europe/Vienna");
      
    • 如果您正在Windows上运行.NET,或者希望编写应用程序以在任何平台上运行,请使用我的库检索
      TimeZoneInfo
      对象:

      // 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)阿姆斯特丹、柏林、伯尔尼、罗马、斯德哥尔摩、维也纳”
    ,则:

    • 如果在Windows上,Windows操作系统的语言环境是英语,那么您可以从
      TimeZoneInfo
      对象获取
      .DisplayName

    • 在所有其他情况下,您可以跳过上面的步骤3,只使用my library,它具有所有语言的所有显示名称:

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

    也可以考虑使用“<代码> TimeZoNeNefsObjult.< /P> Thx Matt进行详细解答。我完全了解并完成了步骤1-2,但步骤3中的描述对我来说是新的。我会尽快实现它,然后回到这篇文章。嗨,马特,我还在研究,但到目前为止,这种方法“TimeZoneInfo tzi=TZConvert.GetTimeZoneInfo(“欧洲/维也纳”)”在我的个人笔记本电脑上对我有效,在我的个人笔记本电脑上,区域设置为英语。我必须了解它在.NET核心运行时的Azure函数中运行时的行为。我正试图弄清楚所有这些术语,IANA、Windows时区标识符、CLDR、POSIX、tz、NodaTime等。在检索到tzi后,您如何处理它?目前我只将其存储在I列数据库中。我注意到TZConvert.GetTimeZoneInfo(“中欧夏季时间”)无法找到。我已经更新了Win 10,并用tzutil/l检查了Windows注册表中的时区名称列表,而这个中欧夏季时间实际上并不存在。但它是有效的时区名称。如果我试图从NodeTime库中获取时区名称“中欧夏季时间”,它也找不到此时区:DateTimeZoneProviders.Tzdb[“中欧夏季时间”]