如何从机场代码(IATA/FAA)获取时区

Cas*_*sse 10 php timezone

我正在尝试创建一个返回给定机场代码(IATA/FAA)的UTC时区的PHP函数.

该函数应该做的是这样的:

echo getTimezoneFromAirportCode("CPH"); // +1
echo getTimezoneFromAirportCode("CXI"); // +14
Run Code Online (Sandbox Code Playgroud)

为了实现这个功能,我需要一个所有机场代码及其时区的列表.

通过搜索我找到了这个列表:https://sourceforge.net/p/openflights/code/HEAD/tree/openflights/data/airports.dat?format =raw(来源:http://openflights.org/data .html)

在查看列表中的几个机场代码后,我发现有些数据不正确.例如,它列CXIUTC -12时区 - 根据此页面不正确.

你们有没有人知道提供制作这项getTimezoneFromAirportCode功能所需数据的公开名单吗?

hro*_*tyr 18

看到问题仍然存在,我想指出我自己的时区地图文件.出于特定目的,IATA tzmap看起来很完美:

https://raw.github.com/hroptatyr/dateutils/tzmaps/iata.tzmap

显然,你必须从zoneinfo文件中查询有问题的偏移(它取决于它可能随时间变化的日期),例如zdump(1).


Mat*_*int 9

您将"时区"与"时区偏移"混淆.它们不是同一件事.您不能只询问某个位置的偏移量 - 您还需要知道相关的具体时间.询问"LAX的时区偏移是什么"是无效的 - 因为在冬天它将是-8而在夏天它将是-7.

你可以问"什么是在这个位置的偏移量,现在 ",但是,很可能给你一个不同的答案取决于当你问的.所以日期和时间必须是输入的一部分.

你真正需要的,而不是要知道的是,LAX对应于IANA时区America/Los_Angeles.这些时区代码可以通过PHP日期/时间API和许多其他系统来理解.

为此,您需要获取每个机场的纬度和经度(可从OpenFlights和许多其他地方获得),并使用此处描述的方法之一查找这些坐标的IANA时区.

我已经在C#中编写了代码,你可以在这里找到它.输出包含在.csv文件中,您可以使用您喜欢的任何语言进行解析和使用.

请务必阅读时区标记wiki,尤其是IANA数据库中的部分,以及标题为"Time Zone!= Offset"的部分.

另请注意,虽然OpenFlights数据库中的lat/lon坐标很好,但该文件中的时区数据不是很准确,因此完成我描述的过程非常重要.当涉及到时区的细节时,您应该只信任IANA数据库并确保您不断更新.


Cas*_*sse 4

我已经设法找到问题的解决方案。通过 Flightstats.com API,可以免费但有限地访问完整的机场数据库:https://developer.flightstats.com/api-docs/airports/v1

API 按以下格式返回所有活动/非活动机场:

{
   "fs": "LAX",
   "iata": "LAX",
   "icao": "KLAX",
   "faa": "LAX",
   "name": "Los Angeles International Airport",
   "street1": "One World Way",
   "street2": "",
   "city": "Los Angeles",
   "cityCode": "LAX",
   "stateCode": "CA",
   "postalCode": "90045-5803",
   "countryCode": "US",
   "countryName": "United States",
   "regionName": "North America",
   "timeZoneRegionName": "America/Los_Angeles",
   "weatherZone": "CAZ041",
   "localTime": "2014-06-20T06:00:50.439",
   "utcOffsetHours": -7,
   "latitude": 33.943399,
   "longitude": -118.408279,
   "elevationFeet": 126,
   "classification": 1,
   "active": true,
   "delayIndexUrl": "https://api.flightstats.com/flex/delayindex/rest/v1/json/airports/LAX?codeType=fs",
   "weatherUrl": "https://api.flightstats.com/flex/weather/rest/v1/json/all/LAX?codeType=fs"
}
Run Code Online (Sandbox Code Playgroud)

这正是我实现功能所需的数据:

echo getTimezoneFromAirportCode("LAX"); // -7
Run Code Online (Sandbox Code Playgroud)

可通过以下 GET 请求获取数据:

https://api.flightstats.com/flex/airports/rest/v1/json/all?appId=[appId]&appKey=[appKey]
Run Code Online (Sandbox Code Playgroud)

[appId]并将[appKey]在此处创建免费的 Flightstats.com 开发者帐户后提供: https: //developer.flightstats.com/signup