【问题标题】:How can I know the relation between the city and its time zone in NodaTime?如何在 NodaTime 中知道城市与其时区之间的关系?
【发布时间】:2014-02-05 17:04:49
【问题描述】:

目前我正在使用 NodaTime 从国家/地区获取时区,但问题是一个国家/地区是否有多个时区。我怎么知道那个时区的城市列表? 我需要知道这两个数据之间的映射。 NodaTime 可以吗?

【问题讨论】:

  • 我认为 Noda 支持美国的时代,所以它认为这是可能的。查看msdn.microsoft.com/en-us/magazine/jj991981.aspx 并搜索 America/Vancouver 以查看示例。
  • 你的问题没有多大意义。 Noda Time 不允许您获取一个国家/地区的 时区,只能获取时区标识符,例如“America/Los_Angeles”的 IANA (tzdb) 区域或 Windows (bcl) 区域“太平洋标准时间”。当然,您可以按国家/地区过滤可用区域列表。那是你想要做的吗?如果有,请看我写的函数in this answer
  • @MattJohnson 抱歉最近回复。实际上,我通过循环遍历 TzdbDateTimeZoneSource.Default.ZoneLocations 来映射国家,然后通过检查 TzdbDateTimeZoneSource.Default.WindowsMapping.MapZones 是否包含 TzdbDateTimeZoneSource.Default.ZoneLocations(i).ZoneId 来映射时区。但我目前的问题是我想找到出发和到达城市的时区。这就是为什么我想知道如何跟踪哪个城市在哪个时区。

标签: .net vb.net nodatime


【解决方案1】:

正确的处理方法如下:

  • 查找每个位置的纬度和经度。如果这些是机场,则考虑使用来自OurAirports.com 的数据。您可能还对OpenFlights 感兴趣,但请注意,无论如何他们都从 OurAirports.com 获取数据。虽然 OpenFlights 数据包含一些时区信息,但不足以准确映射到真正的 IANA 时区标识符。

  • 获得经度和纬度后,您可以使用one of these methods 从该位置查找时区。

  • 然后您可以通过DateTimeZoneProviders.Tzdb[theTimeZoneId]将该时区标识符传递给NodaTime

【讨论】:

  • 作为旁注,我目前正在开发一个名为 GeoTimeZone 的库,它将在单个 dll 中作为可移植类库执行纬度/经度到时区查找。它还没有完全准备好使用,但如果可用,那么与 Noda Time 配对以从纬度/经度查找时区将是一个理想的选择。也许在完成之后,我会创建一个包含机场数据的配套库。
  • 只是一个更新 - GeoTimeZone 现在可以用于此目的了。
  • 概念证明和输出是here
猜你喜欢
  • 2017-12-26
  • 1970-01-01
  • 2018-02-14
  • 2016-05-26
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2016-06-07
相关资源
最近更新 更多