【问题标题】:Finding TimeZone ID with Timezone like "Europe/Germany" [duplicate]使用“欧洲/德国”等时区查找时区 ID [重复]
【发布时间】:2020-04-21 06:51:51
【问题描述】:

我有一个应用程序,在 DB 中提到了一些日期时区格式,例如 "Europe/Rome" 、 "Europe/Berlin",有没有办法使用这种时区格式找出 TimezoneId?

【问题讨论】:

  • 简短回答:不,不使用任何内置的 .NET API。
  • 查看链接的副本以了解如何执行此操作。乔恩的回答也很好。但我假设您标题中的 Europe/Germany 实际上是指 Europe/Berlin,因为前者不是有效的 IANA 时区 ID。

标签: c# .net timezone


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多