Использование времени Joda с часовым поясом IATA

Innovata публикует данные IATA о часовом поясе/летнем времени для авиационной отрасли.
Эти файлы содержат код аэропорта, Часовой пояс IATA, дату начала/конца для смещения UTC , смещение UTC и долгота/широта аэропорта.

Как лучше всего преобразовать часовой пояс IATA в Формат базы данных Olson Db/Tz или DateTimeZone для использования с Joda Time?


person Kb.    schedule 16.09.2011    source источник
comment
У вас есть дополнительная информация о формате этих файлов?   -  person Jon Skeet    schedule 16.09.2011
comment
@Jon Skeet: я думаю, что можно получить образцы файлов от Innovata. Это текстовые файлы со смещением от UTC, кодом часового пояса IATA (код страны + цифра/буква), широтой/долготой. (почта [email protected])   -  person Kb.    schedule 16.09.2011
comment
Но, по-видимому, и с датами изменений... можете ли вы легко использовать DateTimeZoneBuilder? (Знали ли вы об этом раньше?)   -  person Jon Skeet    schedule 16.09.2011
comment
Да дата и время для изменений.   -  person Kb.    schedule 16.09.2011
comment
Что вам нужно делать с DateTimeZone после того, как он у вас есть? В частности, вам нужно просто использовать if для вычислений или вам нужно также вывести для него имя? Кроме того, входные данные включают дату начала/конца для смещения UTC — означает ли это несколько записей для данного аэропорта, по одной для каждой части года DST/ST в расписании?   -  person Ed Staub    schedule 16.09.2011
comment
@Ed Staub: 1. Да, несколько записей для данного аэропорта и 2. да, использовать их для вычислений   -  person Kb.    schedule 16.09.2011


Ответы (2)


Уже добавил в комментарий, но...

Я подозреваю, что проще всего будет просто разобрать файл и создать DateTimeZone экземпляров через DateTimeZoneBuilder. Вы также можете реализовать ZoneInfoProvider, если вы не хотели проходить зоны вокруг.

person Jon Skeet    schedule 16.09.2011
comment
DateTimeZoneBuilder может выполнить эту работу, но для сопоставления кодов часовых поясов IATA с кодами DateTimeZone требуется много работы. - person Kb.; 16.09.2011
comment
@Kb: Правда? Если файл IATA дает вам идентификатор, смещения и даты/время изменений, я не понимаю, как это будет работать. - person Jon Skeet; 16.09.2011
comment
Идентификатор не является идентификатором базы данных Olson db/TZ. Даются смещения/даты/времени. Задача состоит в том, чтобы сопоставить идентификатор стиля olson db с идентификатором стиля IATA (en.wikipedia.org/wiki/ IATA_code#IATA_timezone_codes), или, может быть, я просто ленив. ;)) - person Kb.; 16.09.2011
comment
@Kb: Это совсем не то, о чем вы просили - вы просили способ преобразования часового пояса IATA в формат DateTimeZone или Olsen. Я предложил достаточно простой способ преобразования данных часового пояса IATA в DateTimeZone с помощью DateTimeZoneBuilder. Joda Time не требует, чтобы идентификатор был действительным идентификатором Olsen. Если вам просто нужно выполнить арифметические действия с часовым поясом, почему бы вам просто не использовать DateTimeZoneBuilder, построить DateTimeZone и затем использовать его? - person Jon Skeet; 16.09.2011
comment
Да, вы правы, и ваш ответ ближе всего к решению. Все, что мне нужно сделать сейчас, это начать сопоставление идентификаторов или ДА, просто использовать идентификаторы IATA в Joda! ;)) - person Kb.; 16.09.2011
comment
@Kb: Извините, я до сих пор не понимаю, зачем вам вообще нужно сопоставлять идентификаторы. Почему бы не сохранить идентификаторы в формате IATA? Вы можете полностью игнорировать Олсен. Как я уже упоминал, вы даже можете создать свой собственный ZoneInfoProvider. Фактическое использование DateTimeZoneBuilder звучит так, как будто оно должно быть достаточно простым. Я думаю, что может быть какая-то часть того, что вы делаете, о которой вы не упомянули, иначе я не вижу, где появляются идентификаторы Олсена... - person Jon Skeet; 16.09.2011
comment
Проведу несколько экспериментов с кодированием. Спасибо! - person Kb.; 16.09.2011

Рассматривали ли вы вместо этого преобразование смещения UTC в DateTimeZone?

person Ed Staub    schedule 16.09.2011
comment
Использование фабричного метода для OffsetHoursMinutes? Я не уверен, что смещение Joda включает летнее время? - person Kb.; 16.09.2011
comment
Да, и да. Таким образом, вам нужно выбрать правильную запись, основываясь на дате начала/остановки. Затем, поскольку у него нет правил, DateTimeZone является тем, чем он является - фактически нет понятия DST/no-DST; смещение фиксированное. В качестве альтернативы можно отсортировать все записи для аэропорта в порядке начала и использовать их с DateTimeZoneBuilder. - person Ed Staub; 16.09.2011