8
$\begingroup$

Looking at this answer, from TypeIA, to the question How to get timezone from airport code (IATA/FAA) .

This person is recommending the NASR database, which is good because it's official FAA stuff, but like other users I'm not able to find any information about time zone for an airport in NASR.

Is this information available via NASR or from any other official FAA source?

I do know that I can derive the information from lat/long etc., but what I'm looking for is the official FAA time zone designation for each airport, if such a thing exists.

EDIT: Sorry, to be clear, I'm looking for a digital version of this data suitable for use in a database or app.

$\endgroup$
  • 3
    $\begingroup$ You want a database or look-one-at-a-time is okay for you? $\endgroup$ – vasin1987 Feb 4 '17 at 15:15
  • 3
    $\begingroup$ For one-off lookup, the FAA Chart Supplement has the UTC offset on the first line of the airport entry. It should be a simple matter to download the whole database and use something like AWK or sed to grab the data. faa.gov/air_traffic/flight_info/aeronav/digital_products/dafd $\endgroup$ – JScarry Feb 4 '17 at 16:30
  • 1
    $\begingroup$ Its a long shot, but you can maybe try to submit a question to the FAAs Aeronautical Data Inquiry website asking if they have an authoritative digital source for timezone information: faa.gov/air_traffic/flight_info/aeronav/Aero_Data/… $\endgroup$ – Thaumaturgic Feb 5 '17 at 4:24
  • $\begingroup$ @RyanBurnette thanks for your response, sorry but I'm pretty much a noob at StackExchange, how do I send you a message?! :-) $\endgroup$ – boozedog Feb 6 '17 at 20:05
  • $\begingroup$ There are solutions that would be much easier than what is suggested here but I keep getting voted down; they don't want me to help. $\endgroup$ – user34660 Feb 27 '17 at 0:10
14
$\begingroup$

Each airports timezone is listed in the Airport/Facility Directory. I think the FAA is starting to call these "Chart Supplements" now though. You can search for specific airports here but it looks like the results are in .pdf format. The value you want is circled in red here:

enter image description here

EDIT: As far as digital sources, explicit time zone information seems missing from the NASR airport (APT) data here. The next best thing is Latitude/Longitude it seems.

$\endgroup$
6
$\begingroup$

I have at least a partial solution for you. As I mentioned in a previous comment, I have done some work towards this goal in the past. What I did based on your request was to extract some of that code to build an API of airports which includes latitude, longitude, UTC offset and timezone values.

Here are examples on the endpoints.

For all the data in the whole API you can send an HTTP GET request to https://airports-api.s3-us-west-2.amazonaws.com/. You'll get a JSON response containing all the airports as an array of objects. It's a huge response.

For more pinpoint information the following two RESTful patterns can be utilized for ICAO or IATA airport codes respectively.

https://airports-api.s3-us-west-2.amazonaws.com/icao/katl.json
https://airports-api.s3-us-west-2.amazonaws.com/iata/atl.json

In either case you'll get a JSON response for just that airport. It should look like this.

{  
   "id":3682,
   "city":"Hartsfield Jackson Atlanta Intl",
   "state":"Atlanta",
   "country":"United States",
   "iata":"ATL",
   "icao":"KATL",
   "latitude":33.636719,
   "longitude":-84.428067,
   "elevation":1026,
   "utc_offset":-5,
   "_class":"A",
   "timezone":"America/New_York"
}

Now I know you're working in PHP, but there are surely libraries in PHP that will allow you to make requests to the API and parse the JSON into a PHP array.

Also, a disclaimer and a request. My data is incomplete. Currently this project is on Github in the form of a Middleman site that reads the source CSV and builds a static API. I would love to have collaborators help me expand and improve the source data. I also have code I can extract from other projects that determines the UTC offset and timezone values if we at least know the latitude and longitude. It requires making requests to the Google Maps Timezone API which would get expensive if this were done on demand, so I'd prefer to keep digesting the data and rebuilding the API as a static site. Get involved at Github if you want to help.

Update

I found another source of data that, once integrated into my API will drastically improve the number of available airports. Working on that soon.

$\endgroup$
  • 1
    $\begingroup$ You could avoid Google API by using the free timezone data from efele.net/maps/tz/world. Querying that wouldn't be hard with some spatial database—I have only used SpatiaLite, but the API is basically the same in anything (PostGIS is available for PostgreSQL and should be complete; MySQL has some support built-in, but I don't know whether it is good enough already—it used not to be). $\endgroup$ – Jan Hudec Feb 26 '17 at 17:43
  • $\begingroup$ I'm using a couple dependencies that are already integrated with Google APIs. So far it's the most efficient way to go. I'm definitely checking out the suggestion though, thanks. $\endgroup$ – ryan1618 Feb 27 '17 at 4:21
  • $\begingroup$ airports.api.faralmanac.com doesnt exist anymore $\endgroup$ – Krishna Jul 7 '17 at 7:34
  • 1
    $\begingroup$ @Krishna Fixed the URL's $\endgroup$ – ryan1618 Jan 20 '18 at 6:49
3
$\begingroup$

I was curious how hard this would be to do, so I started experimenting. I’m using macOS Sierra, but the basic steps would be the same on other platforms.

The first thing would be to download the .pdf files. There are 9 of them so you need to do these steps 9 times. Automator makes it easy to convert the PDF files to text. Lots of the text is mangled, but the line you care about is intact. Open Automator and select Workflow from the dropdown window. Drop one of the files into the Automator window. I chose CS_SW_20170105.pdf. In the actions tab, choose PDFs and select Extract PDF Text. Use the icon to run the action. It is surprisingly fast.

Now you have a text file that you can manipulate using your favorite text manipulation tools. I use BBEdit. First, I removed all the line breaks, then used the Process Lines Containing command to copy all lines containing UTC to a new file. Then I got rid of all the stuff after the timezone by doing a find (using GREP to replace ' N[0-9].*' with nothing. Then I removed the line numbers and the space at the beginning of the file.

This is a sample of the result:

CALIFORNIA AVALON CATALINA (AVX)(KAVX) 6 NW UTC–8(–7DT)
BAKERSFIELD BAKERSFIELD MUNI (L45) 378 B TPA—1178(800) RWY 16–34: H4000X75 (ASPH) RWY 16: REIL. Road. Rgt tfc. CALIFORNIA 3 S UTC–8(–7DT)
BANNING MUNI (BNG)(KBNG) 2222 B TPA—3222(1000) RWY 08–26: H4955X100 (ASPH) 1 SE UTC–8(–7DT)
CALIFORNIA CONTINUED FROM PRECEDING PAGE AIRSPACE: CLASS C svc ctc APP CON svc 1400Z‡ Mon–0600Z‡ Fri and/or by NOTAM other times CLASS G. RADIO AIDS TO NAVIGATION: NOTAM FILE BAB. (L) TACAN Chan 23 BAB (108.6)
CALIFORNIA BIG BEAR CITY (L35) 0 W UTC–8(–7DT)
BISHOP CALIFORNIA (BIH)(KBIH) 2 E UTC–8(–7DT)
CALIFORNIA 91 BLYTHE (BLH)(KBLH) 6 W 400 B TPA—1200(800) RWY 08–26: H6543X150 (ASPH) MIRL UTC–8(–7DT)
BORREGO SPRINGS BORREGO VALLEY (L08) 3 E 520 B TPA—1520(1000) RWY 08–26: H5011X75 (ASPH) CALIFORNIA S–30, D–54, 2D–90 MIRL RWY 08: PAPI(P2L)—GA 3.0o TCH 63 ́. Road. Rgt tfc. UTC–8(–7DT)
CALIFORNIA 93 BRIDGEPORT BRYANT FLD (O57) 0 NE UTC–8(–7DT)
BURBANK BOB HOPE CALIFORNIA (BUR)(KBUR) 3 NW UTC–8(–7DT)
CALIFORNIA 95 BUTTONWILLOW ELK HILLS–BUTTONWILLOW (L62) 3 S UTC–8(–7DT)

It takes about two minutes to process the files. It’s not perfectly clean, but you can do some more GREPing to get rid of stuff.

Unfortunately, there is still a lot of junk in the files that will take some manual editing to fix. Probably not more than a couple of hours.

$\endgroup$
1
$\begingroup$

Here is an official FAA source. I have found the information invaluable when researching airport features.

https://www.faa.gov/airports/airport_safety/airportdata_5010/

Once you select the airports you want to research. Click submit. The next page will show you four files to download. Select Airport Facilities Data to download the CSV file (it is labeled a XLS file but it is in fact a CSV file).

Data download page


I thought we were getting magnetic variation for a moment. The file does not contain the information you requested but I thought I would keep the answer here so others can learn about the airport data page.

$\endgroup$
  • $\begingroup$ Yeah these downloads appear to match what's available in NASR. Sadly no time zone info ... $\endgroup$ – boozedog Feb 5 '17 at 23:25
1
$\begingroup$

The best solution I was able to find is to use data from openflights.org. It has time zone information but its data about Daylight savings time is not very good.

I write in .NET and to address this problem I used NodeTime and TimeZoneConverter libraries.

I imported openflights.org data into my database. From this data, I used "Country", "City" and "TimeZone" fields. Data from "TimeZone" field I used as a backup data - in case I won't be able to find TimeZoneInfo for a particular airport.

Following code retrieves current time zone offset for a particular location.

public static class TimeZoneHelper
{
    private const float Tolerance = 0.01f;

    public static float GetTimeZoneOffsetWithRegardsToDst(string countryName, string cityName, float timeZoneOffsetWithoutDst, DateTime currenTime)
    {
        try
        {
            var possibleLocations = TzdbDateTimeZoneSource
                .Default
                .ZoneLocations
                .Where(l => string.Equals(l.CountryName, countryName, StringComparison.InvariantCultureIgnoreCase))
                .ToList();

            if (!possibleLocations.Any())
            {
                return timeZoneOffsetWithoutDst;
            }

            if (possibleLocations.Count == 1)
            {
                var zone = DateTimeZoneProviders.Tzdb[possibleLocations[0].ZoneId];
                return GetTimeZoneOffsetWithDst(currenTime, zone);
            }

            var locationsWithSameTimeZoneOffsetWhenThereIsNoDst = possibleLocations
                .Where(l =>
                {
                    string windowsTimeZoneName = TZConvert.IanaToWindows(l.ZoneId);
                    var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(windowsTimeZoneName);
                    var baseUtcOffset = timeZoneInfo.BaseUtcOffset.TotalSeconds / NodaConstants.SecondsPerHour;

                    if (Math.Abs(baseUtcOffset - timeZoneOffsetWithoutDst) < Tolerance)
                    {
                        return true;
                    }

                    return false;
                })
                .ToList();

            if (locationsWithSameTimeZoneOffsetWhenThereIsNoDst.Any())
            {
                DateTimeZone zone;

                var locationsThatContainsNameOfCity = locationsWithSameTimeZoneOffsetWhenThereIsNoDst
                    .Where(l => l.ZoneId.ToUpperInvariant().Contains(cityName.ToUpperInvariant()))
                    .ToList();
                if (locationsThatContainsNameOfCity.Any())
                {
                    zone = DateTimeZoneProviders.Tzdb[locationsThatContainsNameOfCity[0].ZoneId];
                }
                else
                {
                    zone = DateTimeZoneProviders.Tzdb[locationsWithSameTimeZoneOffsetWhenThereIsNoDst[0].ZoneId];
                }

                return GetTimeZoneOffsetWithDst(currenTime, zone);
            }

            return timeZoneOffsetWithoutDst;
        }
        catch (Exception)
        {
            return timeZoneOffsetWithoutDst;
        }
    }

    private static float GetTimeZoneOffsetWithDst(DateTime currentTime, DateTimeZone zone)
    {
        var instant = Instant.FromDateTimeUtc(currentTime);
        var offset = zone.GetUtcOffset(instant);
        var offsetInSeconds = offset.Seconds;
        var timeZoneOffsetWithDst = offsetInSeconds / NodaConstants.SecondsPerHour;
        return timeZoneOffsetWithDst;
    }
}

NodeTime's TzdbZoneLocations object contains data about latitude and longitude of a particular object, so it is also possible to use latitude and longitude from openflights.org data to match airport to its time zone.

$\endgroup$
-2
$\begingroup$

Timezone is always the same for each state, correct? It seems that all you need is the state. Probably that is why their is no official data with a time zone for each airport. From eNASR I just entered "*" for "Airport ID" and (after a while) got over 19,000 airports. They at least have a state code. I assume it would be relatively easy to save and parse that data.

Also have a look at OurAirports. Click on "Site Info" at the top then "Open data downloads". You can download a CSV with over 50,000 airports in the world with a state code for each one in the US.

$\endgroup$
  • 1
    $\begingroup$ This is a promising approach but unfortunately the premise is wrong: there are 14 states in the US with multiple timezones, e.g. FL (UTC-5 and UTC-6) or TX (-6/-7). $\endgroup$ – PerlDuck Feb 26 '17 at 12:21
  • $\begingroup$ There are solutions but since I got a downvote I don't have confidence this is worth pursuing. $\endgroup$ – user34660 Feb 26 '17 at 21:26
  • $\begingroup$ Until the 1980s, Alaska had four time zones. Many states that are wide East to West (and also some that aren't) have 2 time zones. And then there's Indiana, which is just special... $\endgroup$ – reirab Mar 27 '17 at 16:59
  • $\begingroup$ @reirab, did you see my comment? There are solutions that I could add but I don't understand why this is downvoted when wbeard52's response states explicitly that it can't work but it is not downvoted. $\endgroup$ – user34660 Mar 27 '17 at 17:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.