Using Joda Time with IATA Time zone
Innovata发布航空业的IATA时区/夏令时数据
这些文件包含机场代码,IATA时区,UTC偏移的开始/停止日期,UTC偏移和机场的经度/纬度。
将IATA时区转换为Olson Db / Tz数据库格式或DateTimeZone以与Joda Time一起使用的最佳做法是什么?
-
您是否有关于这些文件格式的更多信息?
-
@Jon Skeet:我认为可以从Innovata获取样本文件。 它们是与UTC,IATA时区代码(国家代码+数字/字母),纬度/经度偏移的文本文件。 (邮件[email protected])
-
但可能还有变更日期......你能轻易使用DateTimeZoneBuilder吗? (之前你知道吗?)
-
是变更的日期和时间。
-
拥有DateTimeZone后你需要做什么? 特别是,您是否只需要使用if进行计算,还是需要为其输出名称? 此外,输入包括"UTC偏移的开始/停止日期" - 这是否意味着给定机场的多个记录,每个DST / ST年份中的一个记录?
-
@Ed Staub:1。是的,给定机场和2.yes的多个记录,用于计算
已添加到评论中,但......
我怀疑解析文件并通过DateTimeZoneBuilder创建DateTimeZone实例是最简单的。 如果您不想传递区域,也可以实现ZoneInfoProvider。
-
DateTimeZoneBuilder可以完成这项工作,但是从IATA时区代码映射到DateTimeZone代码需要做很多工作。
-
@Kb:真的吗?如果IATA文件为您提供了ID,偏移量和更改日期/时间,我看不出它会如何起作用。
-
该ID不是Olson db / TZ数据库ID。给出偏移/日期/ tmes。工作是将olson db style 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! ;))
-
@Kb:抱歉,我仍然不明白为什么你需要映射ID。为什么不保留IATA格式的ID?你可以完全忽略奥尔森。正如我所提到的,您甚至可以构建自己的ZoneInfoProvider。 DateTimeZoneBuilder的实际使用听起来应该相当简单。我想你可能会有一些你未提及的事情,否则我无法看到Olsen ID的来源......
-
会做一些编码实验。谢谢!
您是否考虑过将UTC偏移转换为DateTimeZone?
-
使用工厂方法forOffsetHoursMinutes?我不确定Joda补偿是否包括夏令时?
-
是的,是的。因此,您需要根据开始/停止日期选择正确的记录。然后,因为它没有规则,所以DateTimeZone就是它 - 实际上没有DST / no-DST的概念;偏移量是固定的。或者,按起始顺序对机场的所有记录进行排序,并将其与DateTimeZoneBuilder一起使用。