Linuxdoc Linux Questions
Click here to ask our community of linux experts!
Custom Search

3. What are Time Zones?

Time Zones are a geographical world globe division of 15o each, starting at Greenwich, in England, created to help people know what time is it now in another part of the world.

Nowadays it is much more a political division than geographical, because sometimes people needs to have the same time as other people in not-so-far locations. And for energy savings reasons, we have today the Daylight Savings Time, that are also a Time Zone variation.

Time Zones are usually defined by your country government or some astronomical institute, and is represented by 3 or 4 letters. See Section 3.2 for examples.

Use the timezoneconverter.com to know what time is it now at any part of the globe.

3.1. Daylight Savings Time

For energy savings reasons, governments created the Daylight Savings Time. Our clocks are forwarded one hour, and this makes our days look longer. In fact, what really happens is only a Time Zone change. The primitive time (UTC) is still, and will allways be, the same.

Later we'll see how to enable and disable DST automatically in Linux.

3.2. Time Zones Examples

There is nothing better than examples:

Table 1. Brazilian Time Zones. Shifts relative to UTC

Name and Shift DST Name and Shift Locations
BREST -2:00 BREDT -1:00 Fernando de Noronha
BRST -3:00 BRDT -2:00 São Paulo, Rio, Brasilia, Minas Gerais, North East Region, South Region,etc
BRWST -4:00 BRWDT -3:00 West Region
BRAST -5:00 BRADT -4:00 Acre

Please send me contributions like this table for US Time Zones.

3.3. Time Zone Mechanism on Linux

Linux systems uses the GLIBC dynamic Time Zones, based on /etc/localtime. This file is a link to (or a copy of) a zone information file, usually located under /usr/share/zoneinfo directory.

From a geophysical perspective, there is only 360o/15o=24 Time Zones in the world. But to make things easy to people, and to accommodate all the political variations (like Daylight Savings Time), you'll find hundreds of zoneinfo files in /usr/share/zoneinfo, each for every world city, country, etc.

Some countries, like Brazil, don't have a fixed day to start Daylight Savings Time. It is defined every year, a couple of months before summer, and you may end up in a situation you'll have to change your zoneinfo file, which was compiled by zic from a text file like this.

Example 1. Brazilian Zone Info text file


# Brazil Time Zones
#
# Brazilian Time Zones are:
# BREST: East of Brasilia. Fernando de Noronha.
# BRST:  Brasilia, São Paulo, Rio, Northeast, South etc
# BRWST: West of Brasilia. Mato Grosso, Manaus
# BRAST: Acre.
#
# In daylight saving time, letter 'S' changes to 'D'.
# All the brazilian daylight changes can be found here:
#   http://pcdsh01.on.br/
#   http://pcdsh01.on.br/verao1.html
#
# To install, make:
#
# # zic Brazil.txt
#
# Zone files will be installed in /usr/share/zoneinfo (depends on your
# distribution). Then, make a symbolic link from your zone to /etc/localtime:
#
# # cd /etc; ln -sf /usr/share/zoneinfo/Brazil/Brasilia localtime
#
#
# If you have updates and new standards to this file please send to
# Avi Alkalay (avi @ unix.sh)
# Fred Neves (fneves @ registro.br)
#
# Last update: 12 Oct 2005
#
#
# This file is available at
#
# http://avi.alkalay.net/software/zoneinfo/
#

# Rule  NAME    FROM    TO      TYPE    IN    ON      AT      SAVE    LETTER/S
Rule    Brazil  1931    1932    -       Oct    3      00:00   1:00    D
Rule    Brazil  1932    1933    -       Mar   31      00:00   0       S
Rule    Brazil  1949    only    -       Dec    1      00:00   1:00    D
Rule    Brazil  1950    only    -       Apr   30      00:00   0       S
Rule    Brazil  1950    1952    -       Dec    1      00:00   1:00    D
Rule    Brazil  1951    only    -       Apr   16      00:00   0       S
Rule    Brazil  1952    only    -       Mar   31      00:00   0       S
Rule    Brazil  1953    only    -       Feb   28      00:00   0       S
Rule    Brazil  1963    only    -       Oct   23      00:00   1:00    D
Rule    Brazil  1964    only    -       Mar    1      00:00   0       S
Rule    Brazil  1965    only    -       Jan   31      00:00   1:00    D
Rule    Brazil  1965    only    -       Mar   31      00:00   0       S
Rule    Brazil  1965    only    -       Dec    1      00:00   1:00    D
Rule    Brazil  1966    1968    -       Mar    1      00:00   0       S
Rule    Brazil  1966    1967    -       Nov    1      00:00   1:00    D
Rule    Brazil  1984    only    -       Nov    2      00:00   1:00    D
Rule    Brazil  1985    only    -       Mar   15      00:00   0       S
Rule    Brazil  1985    only    -       Nov    2      00:00   1:00    D
Rule    Brazil  1986    only    -       Mar   15      00:00   0       S
Rule    Brazil  1986    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1987    only    -       Feb   14      00:00   0       S
Rule    Brazil  1987    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1988    only    -       Feb    7      00:00   0       S
Rule    Brazil  1988    only    -       Oct   16      00:00   1:00    D
Rule    Brazil  1989    only    -       Jan   29      00:00   0       S
Rule    Brazil  1989    only    -       Oct   15      00:00   1:00    D
Rule    Brazil  1990    only    -       Feb   11      00:00   0       S
Rule    Brazil  1990    only    -       Oct   21      00:00   1:00    D
Rule    Brazil  1991    only    -       Feb   17      00:00   0       S
Rule    Brazil  1991    only    -       Oct   20      00:00   1:00    D
Rule    Brazil  1992    only    -       Feb    9      00:00   0       S
Rule    Brazil  1992    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1993    only    -       Jan   31      00:00   0       S
Rule    Brazil  1993    only    -       Oct   17      00:00   1:00    D
Rule    Brazil  1994    only    -       Feb   20      00:00   0       S
Rule    Brazil  1994    only    -       Oct   16      00:00   1:00    D
Rule    Brazil  1995    only    -       Feb   19      00:00   0       S
Rule    Brazil  1995    only    -       Oct   15      00:00   1:00    D
Rule    Brazil  1996    only    -       Feb   11      00:00   0       S
Rule    Brazil  1996    only    -       Oct   06      00:00   1:00    D
Rule    Brazil  1997    only    -       Feb   16      00:00   0       S
Rule    Brazil  1997    only    -       Oct   06      00:00   1:00    D
Rule    Brazil  1998    only    -       Mar   01      00:00   0       S
Rule    Brazil  1998    only    -       Oct   11      00:00   1:00    D
Rule    Brazil  1999    only    -       Feb   21      00:00   0       S
Rule    Brazil  1999    only    -       Oct    3      00:00   1:00    D
Rule    Brazil  2000    only    -       Feb   27      00:00   0       S
Rule    Brazil  2000    only    -       Oct    8      00:00   1:00    D
Rule    Brazil  2001    only    -       Feb   18      00:00   0       S
Rule    Brazil  2001    only    -       Oct   14      00:00   1:00    D
Rule    Brazil  2002    only    -       Feb   17      00:00   0       S
Rule    Brazil  2002    only    -       Nov    3      00:00   1:00    D
Rule    Brazil  2003    only    -       Feb   16      00:00   0       S
Rule    Brazil  2003    only    -       Oct   19      00:00   1       D
Rule    Brazil  2004    only    -       Feb   15      00:00   0       S
Rule    Brazil  2004    only    -       Nov    2      00:00   1       D
Rule    Brazil  2005    only    -       Feb   20      00:00   0       S
Rule    Brazil  2005    only    -       Oct   16      00:00   1       D
Rule    Brazil  2006    only    -       Feb   19      00:00   0       S



# Zone  NAME                           GMTOFF  RULES/SAVE    FORMAT  [UNTIL]
Zone    Brazil/DeNoronha               -2:00   Brazil        BRE%sT
Zone    posix/Brazil/DeNoronha         -2:00   Brazil        BRE%sT
Zone    right/Brazil/DeNoronha         -2:00   Brazil        BRE%sT

Zone    America/Sao_Paulo              -3:00   Brazil        BR%sT
Zone    America/Rio_de_Janeiro         -3:00   Brazil        BR%sT
Zone    America/Brasilia               -3:00   Brazil        BR%sT
Zone    posix/America/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    posix/America/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    posix/America/Salvador         -3:00   Brazil        BR%sT
Zone    posix/America/Brasilia         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Central           -3:00   Brazil        BR%sT
Zone    posix/Brazil/Brasilia          -3:00   Brazil        BR%sT
Zone    posix/Brazil/Sao_Paulo         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Salvador          -3:00   Brazil        BR%sT
Zone    posix/Brazil/Rio_de_Janeiro    -3:00   Brazil        BR%sT
Zone    right/America/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    right/America/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    right/America/Salvador         -3:00   Brazil        BR%sT
Zone    right/America/Brasilia         -3:00   Brazil        BR%sT
Zone    right/Brazil/Central           -3:00   Brazil        BR%sT
Zone    right/Brazil/Brasilia          -3:00   Brazil        BR%sT
Zone    right/Brazil/Sao_Paulo         -3:00   Brazil        BR%sT
Zone    right/Brazil/Salvador          -3:00   Brazil        BR%sT
Zone    right/Brazil/Rio_de_Janeiro    -3:00   Brazil        BR%sT
Zone    Brazil/Central                 -3:00   Brazil        BR%sT
Zone    Brazil/Brasilia                -3:00   Brazil        BR%sT
Zone    Brazil/Sao_Paulo               -3:00   Brazil        BR%sT
Zone    Brazil/Rio_de_Janeiro          -3:00   Brazil        BR%sT
Zone    Brazil/Salvador                -3:00   Brazil        BR%sT
Zone    Brazil/East                    -3:00   Brazil        BR%sT
Zone    posix/Brazil/East              -3:00   Brazil        BR%sT
Zone    right/Brazil/East              -3:00   Brazil        BR%sT

Zone    Brazil/West                    -4:00   Brazil        BRW%sT
Zone    Brazil/Manaus                  -4:00   Brazil        BRW%sT
Zone    Brazil/Rondonia                -4:00   Brazil        BRW%sT
Zone    Brazil/Roraima                 -4:00   Brazil        BRW%sT
Zone    Brazil/Mato_Grosso             -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Manaus            -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Mato_Grosso       -4:00   Brazil        BRW%sT
Zone    right/Brazil/Manaus            -4:00   Brazil        BRW%sT
Zone    right/Brazil/Mato_Grosso       -4:00   Brazil        BRW%sT
Zone    posix/America/Manaus           -4:00   Brazil        BRW%sT
Zone    right/America/Manaus           -4:00   Brazil        BRW%sT

Zone    Brazil/Acre                    -5:00   Brazil        BRA%sT

                                

The Rule block defines the date and time we change the Time Zone, while in the Zone block we reference the Rule will manage it. Note that the Zone name is actually the file name under /usr/share/zoneinfo directory, and here we defined several different names for the same Time Zone, just to be easyer for people to find their zone.

This file's comments explains how to install these time zones, using the zic zoneinfo compiler (which already installs them also). To make it effective, you only have to link (or copy) the zoneinfo file to /etc/localtime. In some distributions, there is a higher level (and preferred) way to set the Time Zone, described in Section 4.1.

After making /etc/localtime pointing to the correct zoneinfo file, you are already under that zone rules and DST changes are automatic -- you don't have to change time manually.

The following command sequence shows Linux Time Zone mechanics dynamism. Note they were all issued in less than one minute:

bash$ ls -al /etc/localtime
lrwxrwxrwx  1 root root 35 May 22  2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia
bash$ date
Fri Mar 29 20:13:38 BRST 2002
bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime
bash$ date
Fri Mar 29 23:13:47 GMT 2002
bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime
bash$ date
Fri Mar 29 20:14:03 BRST 2002

At 20:13, I was in my default brazilian Time Zone (BRST), then I switched to GMT and my system time changed to 23:13! When your Time Zone enters DST, you'll see a similar effect, but the rules are all inside your Time Zone (/etc/localtime link doesn't change like this example).

An application running in this machine (eg. web-server generating access logs) will feel this change, so it is very important for developers to remember that the full Time Concept is the current time plus current Time Zone, as described in Section 2.

In the end, I switched back to my correct Time Zone.