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