What Time Zone Is It, Mr. Wolf?

metadata

Recently I travelled to southern Spain, to the beautiful cities of Córdoba and Granada. Whilst there, I experienced the Spanish siesta for the first time. I admit that it struck me as a little odd beforehand but whilst I was there it made perfect sense - the Sun was so hot in the early afternoon that it was very wise to stay inside and do nothing, likewise it was very enjoyable to stay up late into the warm evening with a drink in hand. It took me a couple of days to start thinking about when noon occurs and about what time zone countries choose to be.

For example, Córdoba has a longitude of -4.8° and London has a longitude of -0.1° therefore, crudely, one would expect the Sun to reach ‘high noon’ approximately 19 minutes (24 hours × 4.7° ÷ 360° = 18.8 minutes) later in Córdoba than in London yet the time zone is 1 hour earlier. In effect, if ‘high noon’ occurred at exactly 12:00 (local time) in London then mathematically one would expect the Sun to reach ‘high noon’ at approximately 13:19 (local time) in Córdoba. This would explain why it is so hot in the early afternoon - it is actually midday! In other words, why is the time zone of a country that is West of Greenwich actually ahead of Greenwich? If the Sun rises in the East and sets in the West then Western countries should all be behind Greenwich and Eastern countries should all be ahead of Greenwich.

I wrote a collection of Python scripts to investigate when ‘solar noon’ and ‘chronological noon’ occur for every point on the globe. I then was able to confirm that some countries’ time zone does not appear to be very strongly linked with when the Sun is at its peak, as I had always assumed as a child. For this little project I used the excellent PyEphem Python module to calculate the sunrise, noon and sunset of every point on the globe (using elevation data provided by the GLOBE project). I used time zone information from Natural Earth, which itself obtains data from the CIA World Factbook (which has a nice PDF map of the world time zones). There are four sections to this work, which are outlined below.

§1 Elevation Map

The first step was to create a simple 2D binary array of elevation using the GLOBE dataset. This would then allow me to quickly determine the average elevation of a pixel in later sections. The map that this dataset produces is shown below.

Download:
  1. 512 px × 254 px (0.1 Mpx; 86.5 KiB)
  2. 1,024 px × 508 px (0.5 Mpx; 252.0 KiB)
  3. 2,048 px × 1,017 px (2.1 Mpx; 316.9 KiB)

Never forget how high Antartica is.

§2 Sun Maps

The second step was to use the elevation dataset and the PyEphem module to determine the sunrise, noon and sunset of each pixel on the surface of the Earth. All times are measured from the reference time of 2019-03-20 12:00 UTC and are saved as 2D binary arrays. The three maps that these datasets produce are shown below.

Download:
  1. 512 px × 256 px (0.1 Mpx; 87.7 KiB)
  2. 1,024 px × 513 px (0.5 Mpx; 243.6 KiB)
  3. 2,006 px × 1,004 px (2.0 Mpx; 338.2 KiB)
Download:
  1. 512 px × 256 px (0.1 Mpx; 84.7 KiB)
  2. 1,024 px × 513 px (0.5 Mpx; 236.8 KiB)
  3. 2,006 px × 1,004 px (2.0 Mpx; 318.4 KiB)
Download:
  1. 512 px × 256 px (0.1 Mpx; 88.1 KiB)
  2. 1,024 px × 513 px (0.5 Mpx; 244.1 KiB)
  3. 2,006 px × 1,004 px (2.0 Mpx; 335.0 KiB)

Note how both the sunrise and sunset values are affected by the ground elevation (see the blue/red divide as it crosses the sea onto Antartica) but that the noon values are not.

§3 Time Zone Map

The third step was to rasterise the Natural Earth time zone dataset and save it as a 2D binary array. This would allow easy and direct comparison between the datasets as they would all be simple arrays that directly lay on top of one another, rather than the more accurate polygons of this individual dataset. The map that this dataset produces is shown below.

Download:
  1. 512 px × 256 px (0.1 Mpx; 82.9 KiB)
  2. 1,024 px × 513 px (0.5 Mpx; 207.7 KiB)
  3. 2,006 px × 1,004 px (2.0 Mpx; 223.1 KiB)

Note the tiny little enclaves of different time zones that are scattered around Antartica.

§4 Time Zone Difference Map

Now that all the previous datasets have been created they can be used to calculate what the time zone should be (if ‘time zone’ is to be solely defined in relation to the occurrence of ‘solar noon’) and then compare that number with the actual time zone. The map of the difference between the calculated time zone (the noon values from §2) and the actual time zone (from §3) is shown below.

Download:
  1. 512 px × 259 px (0.1 Mpx; 141.8 KiB)
  2. 1,024 px × 518 px (0.5 Mpx; 408.7 KiB)
  3. 2,012 px × 1,017 px (2.0 Mpx; 337.1 KiB)

To me, there are a couple of very interesting features in this final map.

Within my Python collection I have written a script to check the time zone of particular cities, the output of which is shown below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13

Córdoba (ESP) is at   -4.8° and should be UTC+23:34 but it is actually UTC+01:00 because noon occurs 00:26 after 12:00 UTC.

Denver  (USA) is at -105.0° and should be UTC+16:54 but it is actually UTC+17:00 because noon occurs 07:06 after 12:00 UTC.

Kashgar (CHN) is at   76.0° and should be UTC+04:58 but it is actually UTC+08:00 because noon occurs 19:02 after 12:00 UTC.
Beijing (CHN) is at  116.4° and should be UTC+07:38 but it is actually UTC+08:00 because noon occurs 16:22 after 12:00 UTC.

Lisbon  (PRT) is at   -9.1° and should be UTC+23:17 but it is actually UTC+00:00 because noon occurs 00:43 after 12:00 UTC.
Madrid  (ESP) is at   -3.7° and should be UTC+23:37 but it is actually UTC+01:00 because noon occurs 00:23 after 12:00 UTC.
London  (GBR) is at   -0.1° and should be UTC+23:51 but it is actually UTC+00:00 because noon occurs 00:09 after 12:00 UTC.
Paris   (FRA) is at    2.3° and should be UTC+00:01 but it is actually UTC+01:00 because noon occurs 23:59 after 12:00 UTC.
Berlin  (DEU) is at   13.4° and should be UTC+00:48 but it is actually UTC+01:00 because noon occurs 23:12 after 12:00 UTC.
Warsaw  (POL) is at   21.0° and should be UTC+01:18 but it is actually UTC+01:00 because noon occurs 22:42 after 12:00 UTC.

              
You may also download “checkCities.out” directly or view “checkCities.out” on GitHub Gist (you may need to manually checkout the “main” branch).

Here you can see quantitative supporting evidence for my comments: Kashgar (in Western China) and Beijing (in Eastern China) are both in the same time zone and yet there is 2 hours 40 minutes difference between the occurrence of noon; the Western European capitals (Lisbon, Madrid, London, Paris, Berlin, Warsaw) spread 30.1° of longitude, which is 2.01 twenty-fourths of Earth, but they only have 1 hour between them.

In summary, of course there is more to a country’s time zone than the occurrence of ‘high noon’ on 2019-03-20. Not only are there: economic reasons why a country might choose to be the same time zone as their neighbour; or political reasons why a country might choose to be a different time zone as their neighbour; or practical reasons why a large country might choose to have just one time zone, one must also consider the history. Humans have existed for far longer than the clock, when accurate clocks were invented they would have been used in accordance with the long standing societal traditions of the land in which they were placed. Therefore, too much should not be read into the discussion above - it is merely an interesting Python programming project. Córdoba knows exactly what it is doing: it is very enjoyable to eat a large lunch at 12:00 and have a nap for a couple of hours afterwards whilst the sun is at its hottest, if one can do that and also have the same time zone as (perhaps) their largest trading partner then who cares what time it is when noon occurs?