2015-03-24 1 views
1

Я не получаю API-интерфейс Bing Maps. Я ввожу запрос «Как мне добраться из Аннандейла в Иствуд (Сидней), используя общественный транспорт?» и получить результаты, которые имеют совершенно разные времена, к тому, что я запросил.API-интерфейс транзита Bing Maps: Я неверно форматировал дату или время запроса или неправильно обрабатывал дату-дату?

В API документирован здесь:

https://msdn.microsoft.com/en-us/library/ff701717.aspx

и здесь:

https://msdn.microsoft.com/en-us/library/ff701718.aspx

документация не может указать, какой формат даты ответы находятся, но я полагаю, что это правильно :

http://weblogs.asp.net/bleroy/dates-and-json

Так вот мой вопрос: http://dev.virtualearth.net/REST/V1/Routes/Transit?wp.0=-33.886620,151.171720&wp.1=-33.785780,151.075740&timeType=Departure&dateTime=11:43:00&maxSolns=3&output=json&key=(redacted)

Обратите внимание, что я отредактированный наш ключ API, по понятным причинам.

Обратите внимание, что я прошу автобус в 11:43. Я пробовал это в сочетании с датой и без даты, это не имеет никакого значения.

я получаю ответ, который выглядит вполне действительным на первый взгляд, но это дает мне раз так: «время»: «/ Дата (1427222880000-0700) /»

... что было бы разумно если мое время запроса было 5:43, но это не так. Этот формат даты четко указывает «миллисекунды с 1970 года, UTC» (в отчаянии я попробовал добавить &, вычитая 7 часов, но ничего не имело смысла). В документации четко указано, что мое время 11:43 должно быть указано в местном часовом поясе, то есть как «11:43».

Исходя из предположения, что документация Bing неверна или что реализация неверна, я попытался произвольно добавить 6 часов или вычесть 18 часов из моего времени запроса (что потребовало добавления даты в URL), но я ничего не получил это имело смысл. Я не могу получить соответствие между моими результатами API и общедоступным браузером Bing.

Я не мог узнать, кто может спросить у Microsoft.

Любые идеи?

+0

1427222880000 вт, 24 марта 2015 18:48:00 GMT. 0700 является текущий часовой пояс в Редмонде, штат Вашингтон. Это 24 марта 2015 года 11:48:00 в Редмонде, штат Вашингтон. Разве это не имеет смысла? – Jayen

+0

Вы пытались добавить часовой пояс к дате ввода? – Jayen

+0

Я не в Редмонде, не мои места происхождения или назначения. Согласно документации API, нет никакого положения, чтобы добавить часовой пояс к входному параметру dateTime, это всегда понимается как локальное время на соответствующем lat/long. Какой синтаксис вы предложите, я попробую? –

ответ

1

У меня есть следующее решение, которое может или не может быть надежным, и это нарушает спецификацию, но он работает сейчас:

  1. Добавьте 0700 в метку времени, т.е. преобразуйте ее в «минус 7 часов». Если бы вместо «-» вместо «-» был знак «+», знак был бы отменен, хотя я подозреваю, что плюсы никогда не используются (не знаю, как они меняют знак).

  2. Вычесть смещение часового пояса в Сиднее, т. Е. -11 часов (т. Е. Добавить 11 часов).

Это тогда дает мне то, что я могу поставить в экземпляр Java, «Date», то есть «новая дата (х)», которая представляет собой время, независимо от любой временной зоны.

Я надеялся, что я мог бы использовать «миллисекунды с UTC» и игнорировать «0700», потому что наша система хранит эти времена в «миллисекундах с UTC», но я не мог заставить это работать.

Все согласуется с гипотезой о том, что Bing неправильно обрабатывает Сиднейские файлы GTFS, интерпретируя их как времена Редмонда вместо Сиднея.

0

Как указано в комментариях, возвращаемая информация о дате верна. Формат возвращаемого значения DataTime в ответ JSON является OData DateTime:

“/Date([ticks][“+” | “-” ][offset])/” 

[клещей] = количество миллисекунд с полуночи 1 января 1970

[смещение] = число минут, чтобы добавить или вычесть

вы можете найти документацию по этому вопросу здесь: http://www.odata.org/documentation/odata-version-2-0/JSON-format/

+0

Информация о дате не имеет никакого отношения к дате ввода. Время, которое я дал (11:43. Сиднейское время -> первая шина - 11:48 Время в Редмонде?) Поэтому я предполагаю, что использовал неправильное время ввода. Знаете ли вы, что я должен указать для времени ввода? API четко заявляет, что «11:43» будет интерпретироваться как «локальное» время, поэтому кажется, что это ошибка или неправильная документация. –

+0

Как упоминал Джайен, время, которое возвращается, составляет 11:48 по местному времени, что имеет смысл. – rbrundritt

+0

@rbrunditt Это не имеет смысла. Я даже не знаю, в какой часовой пояс вы ссылаетесь, когда используете слово «местное время» - время в Сиднее? Время Редмонда? Как время Редмонда можно считать «местным»? Вы прочитали мой комментарий выше? Прямо сейчас, Бинг говорит мне: «нет автобуса в течение 13 часов». –

0

Второе звено вы дали говорит:

Ответ JSON возвращает время отправления и прибытия как строки DateTime, такие как 1318005467000-0700.Первое целое число в строке (1318005467000) представляет количество секунд с 12:00 до полуночи, 1 января 1970 г. UTC. Остальная часть строки (-0700) представляет собой смещение в часах, которые вы должны применить для получения местного времени. Например, целое число 1318005467000 представляет время «10/7/2011 4:37:47 PM». Когда вы применяете смещение -0700, вы вычисляете локальное время как «10/7/2011 9:37:47 AM». Для получения дополнительной информации см. Структура DateTime.

Так что это 11:48 по местному времени. (Не спрашивайте меня, для определения «местных».)

+0

Информация о дате не имеет никакого отношения к дате ввода DateTime, которую я дал (11:43 Сиднейское время -> первая шина 11:48 Время в Редмонде?) Поэтому я предполагаю, что использовал неправильное время ввода. Знаете ли вы, что я должен указать для времени ввода? API четко заявляет, что «11:43» будет интерпретироваться как «локальное» время, поэтому кажется, что это ошибка или неправильная документация. –

+0

вы дали 11:43 «местное» время, и оно вернулось 11:48 «местное» время. в то время как -0700 должен означать redmond, нигде в документах он не говорит, что это так. – Jayen

+0

Он вернулся 5:48 Сиднее, а не 11:48. –

Смежные вопросы