使用“欧洲/德国”等时区查找时区 ID

CSh*_*ped 0 .net c# timezone

我有一个应用程序,其中包含数据库中提到的一些日期时区格式,例如“欧洲/罗马”、“欧洲/柏林”,有没有办法找出 TimezoneId 使用这种时区格式?

Jon*_*eet 5

在 Windows 上运行时,TimeZoneInfo使用 Windows 时区数据库,而不是使用“欧洲/罗马”等形式的 ID的IANA 时区数据库

虽然您可以查找包含城市名称的 Windows 时区 ID(如其他答案中所建议),但绝对不能保证您总会找到这样的 ID,我建议您不要这样做。即使您找到了正确的TimeZoneInfo,它也不一定具有与 IANA 数据库相同的规则。

相反,我建议使用支持 IANA 时区数据库的第三方库。我维护了一个这样的库Noda Time,它是 .NET 的一个完整的替代日期/时间 API - 但如果您真的需要它们DateTimeDateTimeOffset则可以进行相互转换。也存在其他使用 IANA 时区数据库的库,但我相信 Noda Time 是最广泛采用的库。

如果您确实需要使用TimeZoneInfo,则可以使用 Noda Time 来查找与TzdbDateTimeZoneSource.WindowsMapping2.x 版本中使用的最匹配的 Windows ID ,或者如果您使用的是 3.x(目前处于测试阶段),则TzdbDateTimeZoneSource.TzdbToWindowsIds可以使生活更简单。