Bing Maps transit API:我是否错误地格式化了查询日期时间或错误地解析了输出日期时间?
Bing Maps transit API: Am I formatting the query datetime incorrectly or parsing output datetime incorrectly?
我无法使 Bing 地图 API 正常工作。我正在输入一个查询 "How do I get from Annandale to Eastwood (Sydney) using public transport?",得到的结果与我查询的时间完全不同。
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
请注意,出于显而易见的原因,我编辑了我们的 API 密钥。
请注意,我要在 11:43am 叫车。我试过结合日期和没有日期,这没有区别。
我收到的回复乍一看似乎很有效,但它给了我这样的时间:
"time":"/日期(1427222880000-0700)/"
...如果我的查询时间是5:43,这将是合理的,但事实并非如此。该日期格式清楚地表明 "milliseconds since 1970, UTC"(绝望中我尝试加减 7 小时,但没有任何意义)。文档清楚地表明我的 11:43 时间应该在本地时区中指定,即就像“11:43”一样。
假设 Bing 文档错误或实施错误,我尝试任意增加 6 小时或从我的查询时间中减去 18 小时(这需要将日期添加到 URL), 但我没有得到任何有意义的东西。我的 API 结果与 public Bing 浏览器应用程序之间没有任何对应关系。
我也找不到向 Microsoft 询问谁。
有什么想法吗?
如评论中所述,返回的日期信息是正确的。 JSON 响应中返回的 DataTime 值的格式是 OData DateTime:
“/Date([ticks][“+” | “-” ][offset])/”
[ticks] = 自 1970 年 1 月 1 日午夜以来的毫秒数
[offset] = 增加或减少的分钟数
您可以在此处找到相关文档:http://www.odata.org/documentation/odata-version-2-0/JSON-format/
你给出的第二个 link 说:
The JSON response returns departure and arrival times as DateTime strings, such as 1318005467000-0700. The first integer in the string (1318005467000) represents the number of seconds since 12:00:00 midnight, January 1, 1970 UTC. The remainder of the string (-0700) represents an offset in hours that you must apply to get the local time. For example, the integer 1318005467000 represents the time '10/7/2011 4:37:47 PM'. When you apply the -0700 offset, you compute the local time as '10/7/2011 9:37:47 AM'. For more information, see DateTime Structure.
现在是 11:48 当地时间。 (不要问我 'local' 的定义。)
我有以下可能可靠也可能不可靠的解决方案,它违反了规范,但目前有效:
将 0700 添加到时间戳,即将其转换为 "negative 7 hrs"。如果有一个 '+' 而不是 '-' 那么符号将被反转,尽管我怀疑从未使用过加号(不知道他们如何改变符号)。
减去悉尼的时区偏移,即 -11 小时(即加 11 小时)。
然后这给了我一些我可以放入 Java 'Date' 实例的东西,即“new Date(x)”,它表示独立于任何时区的时间。
我希望我可以使用 "milliseconds since UTC" 并忽略“0700”,因为我们的系统将这些时间存储在 "milliseconds since UTC" 中,但我无法让它工作。
一切都符合假设 Bing 错误地解析了悉尼 GTFS 文件,将它们解释为雷德蒙德时间而不是悉尼时间。
我无法使 Bing 地图 API 正常工作。我正在输入一个查询 "How do I get from Annandale to Eastwood (Sydney) using public transport?",得到的结果与我查询的时间完全不同。
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
请注意,出于显而易见的原因,我编辑了我们的 API 密钥。
请注意,我要在 11:43am 叫车。我试过结合日期和没有日期,这没有区别。
我收到的回复乍一看似乎很有效,但它给了我这样的时间: "time":"/日期(1427222880000-0700)/"
...如果我的查询时间是5:43,这将是合理的,但事实并非如此。该日期格式清楚地表明 "milliseconds since 1970, UTC"(绝望中我尝试加减 7 小时,但没有任何意义)。文档清楚地表明我的 11:43 时间应该在本地时区中指定,即就像“11:43”一样。
假设 Bing 文档错误或实施错误,我尝试任意增加 6 小时或从我的查询时间中减去 18 小时(这需要将日期添加到 URL), 但我没有得到任何有意义的东西。我的 API 结果与 public Bing 浏览器应用程序之间没有任何对应关系。
我也找不到向 Microsoft 询问谁。
有什么想法吗?
如评论中所述,返回的日期信息是正确的。 JSON 响应中返回的 DataTime 值的格式是 OData DateTime:
“/Date([ticks][“+” | “-” ][offset])/”
[ticks] = 自 1970 年 1 月 1 日午夜以来的毫秒数
[offset] = 增加或减少的分钟数
您可以在此处找到相关文档:http://www.odata.org/documentation/odata-version-2-0/JSON-format/
你给出的第二个 link 说:
The JSON response returns departure and arrival times as DateTime strings, such as 1318005467000-0700. The first integer in the string (1318005467000) represents the number of seconds since 12:00:00 midnight, January 1, 1970 UTC. The remainder of the string (-0700) represents an offset in hours that you must apply to get the local time. For example, the integer 1318005467000 represents the time '10/7/2011 4:37:47 PM'. When you apply the -0700 offset, you compute the local time as '10/7/2011 9:37:47 AM'. For more information, see DateTime Structure.
现在是 11:48 当地时间。 (不要问我 'local' 的定义。)
我有以下可能可靠也可能不可靠的解决方案,它违反了规范,但目前有效:
将 0700 添加到时间戳,即将其转换为 "negative 7 hrs"。如果有一个 '+' 而不是 '-' 那么符号将被反转,尽管我怀疑从未使用过加号(不知道他们如何改变符号)。
减去悉尼的时区偏移,即 -11 小时(即加 11 小时)。
然后这给了我一些我可以放入 Java 'Date' 实例的东西,即“new Date(x)”,它表示独立于任何时区的时间。
我希望我可以使用 "milliseconds since UTC" 并忽略“0700”,因为我们的系统将这些时间存储在 "milliseconds since UTC" 中,但我无法让它工作。
一切都符合假设 Bing 错误地解析了悉尼 GTFS 文件,将它们解释为雷德蒙德时间而不是悉尼时间。