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.
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.
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.
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.