【问题标题】:Using Joda Time with IATA Time zone将 Joda 时间与 IATA 时区一起使用
【发布时间】:2011-11-18 18:58:25
【问题描述】:

Innovata 发布航空业的IATA Time Zone/Daylight Saving Time 数据。
这些文件包含机场代码、IATA Time Zone、UTC 偏移的开始/停止日期、UTC 偏移和机场的经度/纬度。

IATA Time Zone 转换为Olson Db/Tz Database formatDateTimeZone for use with Joda Time 的最佳做法是什么?

【问题讨论】:

  • 你有更多关于这些文件格式的信息吗?
  • @Jon Skeet:我认为可以从 Innovata 获取示例文件。它们是与 UTC、IATA 时区代码(国家代码 + 数字/字母)、纬度/经度有偏移的文本文件。 (邮件 info@innovata-llc.com)
  • 但大概也有更改的日期...您可以轻松使用 DateTimeZoneBuilder 吗? (你以前知道吗?)
  • 是的更改日期和时间。
  • 拥有 DateTimeZone 后需要做什么?特别是,您是否只需要使用 if 进行计算,还是需要为它输出一个名称?此外,输入包括“UTC 偏移的开始/停止日期” - 这是否意味着给定机场的多个记录,一个用于时间表中的每个 DST/ST 年份部分?

标签: java timezone jodatime dst


【解决方案1】:

已经在评论中添加了,但是...

我怀疑只解析文件并通过DateTimeZoneBuilder 创建DateTimeZone 实例是最简单的。如果您不想绕过这些区域,也可以实现 ZoneInfoProvider

【讨论】:

  • DateTimeZoneBuilder 可以完成这项工作,但从 IATA 时区代码映射到 DateTimeZone 代码需要大量工作。
  • @Kb:真的吗?如果 IATA 文件为您提供 ID、偏移量和更改日期/时间,我看不出它会如何工作。
  • ID 不是 Olson db/TZ 数据库 ID。给出了偏移量/日期/时间。工作是将 olson db 样式 ID 映射到 IATA 样式 ID (en.wikipedia.org/wiki/IATA_code#IATA_timezone_codes),或者我只是懒惰。 ;))
  • @Kb:这根本不是您所要求的 - 您要求一种将 IATA 时区转换为 DateTimeZone 或 Olsen 格式的方法。我提出的是一种通过 DateTimeZoneBuilder 将 IATA 时区数据转换为 DateTimeZone 的相当简单的方法。 Joda Time 并不需要 ID 是有效的 Olsen ID。如果你只需要对时区做算术,为什么不直接使用 DateTimeZoneBuilder,构建一个 DateTimeZone 然后使用它呢?
  • 是的,你是对的,你的答案是最接近解决方案的。我现在要做的就是开始映射 ID,或者是的,只需在 Joda 中使用 IATA ID! ;))
【解决方案2】:

您是否考虑过将 UTC 偏移量转换为 DateTimeZone?

【讨论】:

  • 对OffsetHoursMinutes 使用工厂方法?我不确定 Joda 偏移量是否包括 DST?
  • 是的,是的。因此,您需要根据开始/停止日期选择正确的记录。然后,因为它没有规则,所以 DateTimeZone 就是这样——实际上没有 DST/no-DST 的概念;偏移量是固定的。或者,按开始顺序对机场的所有记录进行排序,并将它们与 DateTimeZoneBuilder 一起使用。
猜你喜欢
  • 1970-01-01
  • 2015-11-03
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
相关资源
最近更新 更多