A map of the TZ timezones in the US

This map shows the boundaries of the TZ timezones in the US.

It is available as a shapefile (1.8Mb). There is one geometry column (geom) made of polygons and a text column (tzid) containing the corresponding TZ timezone identifier.

This map is derived from existing maps, so it inherits their “scale”, 1/2,000,000.

There are no restrictions on the use of this map. Because of the maps from which this map is derived, acknowledgment of the National Atlas of the United States of America would be appreciated in products derived from this map.

Known problems

TZ distinguishes five zones for Alaska: America/Akdak, America/Juneau, America/Yakukat, America/Anchorage and America/Nome. However, there are no clues about the geographical extent of the last four zones. I have placed all their extent under America/Juneau for now.

TZ mentions that America/Kentucky/Louisville contains three counties of Indiana and part of Kentucky, but I have not yet found which part that is. In the map layer, the extent of that zone is only the counties of Indiana (Clark, Floyd and Harrison counties).

In the shapefile, the boundary between America/Pacific and America/Denver is currently following the Nevada/Utah border. In practice and by law since 1999, the city of West Wendover, Nevada, is part of America/Denver.

Any help in fixing those problems (or identifying any other problem) is welcome; just email me the details.

How it was built

The starting point is a couple of map layers from the National Atlas:

Unfornately, these two maps do not work well together: for example, some common bondaries are not digitized in exactly the same way. So the first step was to conflate them. For the County Boundaries layer, the only change was to add intermediate points where a time zone boundary departs from a county boundary. For the Time Zones layer, the change was to replace the common boundaries by the data from the Conty Boundaries. The resulting maps: modified County Boundaries (4.2MB) and modified Time Zone bondaries (2MB).

The next step was to create an overlay of the two modified maps, using OpenJUMP, a free GIS tool.

The resulting overlay was stored in a PostGIS database, and the following psql script was used to add a tzid field, following the geographical descriptions in the TZ database:

alter table overlay add column tzid varchar (80);

update overlay set tzid = 'none';

update overlay set tzid = 'America/Boise'
where (state = 'ID' or state = 'OR')
  and symbol = 'MO';

update overlay set tzid = 'America/Phoenix'
where symbol = 'MOno';

update overlay set tzid = 'America/Denver'
where symbol = 'MO'
  and tzid = 'none';

update overlay set tzid = 'America/North_Dakota/Center'
where state = 'ND' 
  and county = 'Oliver County';

update overlay set tzid = 'America/North_Dakota/Salem'
where state = 'ND'
  and county = 'Morton County';

update overlay set tzid = 'America/Indiana/Marengo'
where state = 'IN' 
  and county = 'Crawford County';

update overlay set tzid = 'America/Indiana/Vincennes'
where state = 'IN'
  and (   county = 'Daviess County'
       or county = 'Dubois County'
       or county = 'Knox County'
       or county = 'Martin County'
       or county = 'Perry County');

update overlay set tzid = 'America/Indiana/Petersburg'
where state = 'IN'
  and (   county = 'Pike County');

update overlay set tzid = 'America/Indiana/Knox'
where state = 'IN'
  and (   county = 'Starke County');

update overlay set tzid =  'America/Indiana/Winamac'
where state = 'IN'
  and (   county = 'Pulaski County');

update overlay set tzid = 'America/Indiana/Vevay'
where state = 'IN'
  and (   county = 'Switzerland County');

update overlay set tzid = 'America/Kentucky/Louisville'
where state = 'IN'
  and (   county = 'Clark County'
       or county = 'Floyd County'
       or county = 'Harrison County');

update overlay set tzid = 'America/New_York'
where state = 'IN'
  and (   county = 'Dearborn County'
       or county = 'Ohio County');

update overlay set tzid = 'America/Chicago'
where state = 'IN'
  and (   county = 'Gibson County'
       or county = 'Jasper County'
       or county = 'Lake County'
       or county = 'LaPorte County'
       or county = 'Newton County'
       or county = 'Porter County'
       or county = 'Posey County'
       or county = 'Spencer County'
       or county = 'Vanderburgh County'
       or county = 'Warrick County'
       or county is null);

update overlay set tzid = 'America/Indiana/Indianapolis'
where state = 'IN' 
  and tzid = 'none';

update overlay set tzid = 'America/Kentucky/Monticello'
where state = 'KY'
  and (   county = 'Wayne County');

update overlay set tzid = 'America/Menominee'
where state = 'MI'
  and (   county = 'Dickinson County'
       or county = 'Gogebic County'
       or county = 'Iron County'
       or county = 'Menominee County');


update overlay set tzid = 'America/Chicago'
where symbol = 'CE'
  and tzid = 'none';

update overlay set tzid = 'America/Los_Angeles'
where symbol = 'PA'
  and tzid = 'none';

update overlay set tzid = 'America/New_York'
where symbol = 'EA'
  and tzid = 'none';

update overlay set tzid = 'Pacific/Honolulu'
where symbol = 'HAno';

update overlay set tzid = 'America/Puerto_Rico'
where state = 'PR';

update overlay set tzid = 'America/St_Thomas'
where state = 'VI';

update overlay set tzid = 'America/Adak'
where symbol = 'HA';


update overlay set tzid = 'America/Juneau'
where symbol = 'AL';

Finally, the tz map was created by regrouping the adjacent polygons, using this script:

create table tz (ogc_fid serial not null, 
                 tzid varchar(80), 
                 constraint tz3_pk PRIMARY KEY (ogc_fid)) without oids;

select addgeometrycolumn ('tz', 'geom', -1, 'POLYGON', 2);

insert into tz (tzid, geom)
  select tzid, h from (
    select tzid as tzid, geom (dump (g)) as h from (
      select tzid as tzid, geomunion (geom) as g
      from overlay 
      group by tzid)
    as x)
  as y;



Contact - Thanks

History: