# <pre>
# @(#)africa	8.21
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.

# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).

# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually.  Law sent in several helpful summaries
# of the IATA's data after 1990.
#
# Except where otherwise noted, Shanks & Pottenger is the source for
# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# Previous editions of this database used WAT, CAT, SAT, and EAT
# for +0:00 through +3:00, respectively,
# but Mark R V Murray reports that
# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
# `CAT' is commonly used for +2:00 in countries north of South Africa, and
# `WAT' is probably the best name for +1:00, as the common phrase for
# the area that includes Nigeria is ``West Africa''.
# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
#
# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
# I'd guess that this was because people needed _some_ name for -1:00,
# and at the time, far west Africa was the only major land area in -1:00.
# This usage is now obsolete, as the last use of -1:00 on the African
# mainland seems to have been 1976 in Western Sahara.
#
# To summarize, the following abbreviations seem to have some currency:
#	-1:00	WAT	West Africa Time (no longer used)
#	 0:00	GMT	Greenwich Mean Time
#	 2:00	CAT	Central Africa Time
#	 2:00	SAST	South Africa Standard Time
# and Murray suggests the following abbreviation:
#	 1:00	WAT	West Africa Time
# I realize that this leads to `WAT' being used for both -1:00 and 1:00
# for times before 1976, but this is the best I can think of
# until we get more information.
#
# I invented the following abbreviations; corrections are welcome!
#	 2:00	WAST	West Africa Summer Time
#	 2:30	BEAT	British East Africa Time (no longer used)
#	 2:44:45 BEAUT	British East Africa Unified Time (no longer used)
#	 3:00	CAST	Central Africa Summer Time (no longer used)
#	 3:00	SAST	South Africa Summer Time (no longer used)
#	 3:00	EAT	East Africa Time
#	 4:00	EAST	East Africa Summer Time (no longer used)

# Algeria
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	S
Rule	Algeria	1916	1919	-	Oct	Sun>=1	23:00s	0	-
Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	S
Rule	Algeria	1918	only	-	Mar	 9	23:00s	1:00	S
Rule	Algeria	1919	only	-	Mar	 1	23:00s	1:00	S
Rule	Algeria	1920	only	-	Feb	14	23:00s	1:00	S
Rule	Algeria	1920	only	-	Oct	23	23:00s	0	-
Rule	Algeria	1921	only	-	Mar	14	23:00s	1:00	S
Rule	Algeria	1921	only	-	Jun	21	23:00s	0	-
Rule	Algeria	1939	only	-	Sep	11	23:00s	1:00	S
Rule	Algeria	1939	only	-	Nov	19	 1:00	0	-
Rule	Algeria	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
Rule	Algeria	1944	only	-	Oct	 8	 2:00	0	-
Rule	Algeria	1945	only	-	Sep	16	 1:00	0	-
Rule	Algeria	1971	only	-	Apr	25	23:00s	1:00	S
Rule	Algeria	1971	only	-	Sep	26	23:00s	0	-
Rule	Algeria	1977	only	-	May	 6	 0:00	1:00	S
Rule	Algeria	1977	only	-	Oct	21	 0:00	0	-
Rule	Algeria	1978	only	-	Mar	24	 1:00	1:00	S
Rule	Algeria	1978	only	-	Sep	22	 3:00	0	-
Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	S
Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
			0:00	Algeria	WE%sT	1940 Feb 25 2:00
			1:00	Algeria	CE%sT	1946 Oct  7
			0:00	-	WET	1956 Jan 29
			1:00	-	CET	1963 Apr 14
			0:00	Algeria	WE%sT	1977 Oct 21
			1:00	Algeria	CE%sT	1979 Oct 26
			0:00	Algeria	WE%sT	1981 May
			1:00	-	CET

# Angola
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Luanda	0:52:56	-	LMT	1892
			0:52:04	-	AOT	1911 May 26 # Angola Time
			1:00	-	WAT

# Benin
# Whitman says they switched to 1:00 in 1946, not 1934;
# go with Shanks & Pottenger.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
			0:00	-	GMT	1934 Feb 26
			1:00	-	WAT

# Botswana
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Gaborone	1:43:40 -	LMT	1885
			2:00	-	CAT	1943 Sep 19 2:00
			2:00	1:00	CAST	1944 Mar 19 2:00
			2:00	-	CAT

# Burkina Faso
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Ouagadougou	-0:06:04 -	LMT	1912
			 0:00	-	GMT

# Burundi
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Bujumbura	1:57:28	-	LMT	1890
			2:00	-	CAT

# Cameroon
# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Douala	0:38:48	-	LMT	1912
			1:00	-	WAT

# Cape Verde
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
			-2:00	-	CVT	1942 Sep
			-2:00	1:00	CVST	1945 Oct 15
			-2:00	-	CVT	1975 Nov 25 2:00
			-1:00	-	CVT

# Central African Republic
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Bangui	1:14:20	-	LMT	1912
			1:00	-	WAT

# Chad
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Ndjamena	1:00:12 -	LMT	1912
			1:00	-	WAT	1979 Oct 14
			1:00	1:00	WAST	1980 Mar  8
			1:00	-	WAT

# Comoros
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul   # Moroni, Gran Comoro
			3:00	-	EAT

# Democratic Republic of Congo
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
			1:00	-	WAT
Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
			2:00	-	CAT

# Republic of the Congo
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Brazzaville	1:01:08 -	LMT	1912
			1:00	-	WAT

# Cote D'Ivoire
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
			 0:00	-	GMT

# Djibouti
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Djibouti	2:52:36 -	LMT	1911 Jul
			3:00	-	EAT

###############################################################################

# Egypt

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	S
Rule	Egypt	1941	only	-	Sep	16	0:00	0	-
Rule	Egypt	1942	1944	-	Apr	 1	0:00	1:00	S
Rule	Egypt	1942	only	-	Oct	27	0:00	0	-
Rule	Egypt	1943	1945	-	Nov	 1	0:00	0	-
Rule	Egypt	1945	only	-	Apr	16	0:00	1:00	S
Rule	Egypt	1957	only	-	May	10	0:00	1:00	S
Rule	Egypt	1957	1958	-	Oct	 1	0:00	0	-
Rule	Egypt	1958	only	-	May	 1	0:00	1:00	S
Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	S
Rule	Egypt	1959	1965	-	Sep	30	3:00	0	-
Rule	Egypt	1966	1994	-	Oct	 1	3:00	0	-
Rule	Egypt	1982	only	-	Jul	25	1:00	1:00	S
Rule	Egypt	1983	only	-	Jul	12	1:00	1:00	S
Rule	Egypt	1984	1988	-	May	 1	1:00	1:00	S
Rule	Egypt	1989	only	-	May	 6	1:00	1:00	S
Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
# IATA (after 1990) says transitions are at 0:00.
# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
Rule	Egypt	1995	max	-	Apr	lastFri	 0:00s	1:00	S
Rule	Egypt	1995	2005	-	Sep	lastThu	23:00s	0	-
# From Steffen Thorsen (2006-09-19):
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
# Egypt will turn back clocks by one hour at the midnight of Thursday
# after observing the daylight saving time since May.
# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
Rule	Egypt	2006	only	-	Sep	21	23:00s	0	-
# From Dirk Losch (2007-08-14):
# I received a mail from an airline which says that the daylight
# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
# http://www.nentjes.info/Bill/bill5.htm 
# http://www.timeanddate.com/worldclock/city.html?n=53
# From Steffen Thorsen (2007-09-04): The official information...:
# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
# From Abdelrahman Hassan (2007-09-06):
# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
# than the year of the Gregorian calendar, Ramadan shifts earlier each
# year. This year it will be observed September 13 (September is quite
# hot in Egypt), and the idea is to make fasting easier for workers by
# shifting business hours one hour out of daytime heat. Consequently,
# unless discontinued, next DST may end Thursday 28 August 2008.
# From Paul Eggert (2007-08-17):
# For lack of better info, assume the new rule is last Thursday in August.

# From Petr Machata (2009-04-06):
# The following appeared in Red Hat bugzilla[1] (edited):
#
# > $ zdump -v /usr/share/zoneinfo/Africa/Cairo | grep 2009
# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 21:59:59 2009 UTC = Thu =
# Apr 23
# > 23:59:59 2009 EET isdst=0 gmtoff=7200
# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 22:00:00 2009 UTC = Fri =
# Apr 24
# > 01:00:00 2009 EEST isdst=1 gmtoff=10800
# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 20:59:59 2009 UTC = Thu =
# Aug 27
# > 23:59:59 2009 EEST isdst=1 gmtoff=10800
# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 21:00:00 2009 UTC = Thu =
# Aug 27
# > 23:00:00 2009 EET isdst=0 gmtoff=7200
#
# > end date should be Thu Sep 24 2009 (Last Thursday in September at 23:59=
# :59)
# > http://support.microsoft.com/kb/958729/
#
# timeanddate[2] and another site I've found[3] also support that.
#
# [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=492263">
# https://bugzilla.redhat.com/show_bug.cgi?id=492263
# </a>
# [2] <a href="http://www.timeanddate.com/worldclock/clockchange.html?n=53">
# http://www.timeanddate.com/worldclock/clockchange.html?n=53
# </a>
# [3] <a href="http://wwp.greenwichmeantime.com/time-zone/africa/egypt/">
# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
# </a>

# From Arthur David Olson (2009-04-20):
# In 2009 (and for the next several years), Ramadan ends before the fourth
# Thursday in September; Egypt is expected to revert to the last Thursday
# in September.
Rule	Egypt	2008	only	-	Aug	lastThu	23:00s	0	-
Rule	Egypt	2009	max	-	Sep	lastThu	23:00s	0	-

# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Cairo	2:05:00 -	LMT	1900 Oct
			2:00	Egypt	EE%sT

# Equatorial Guinea
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Malabo	0:35:08 -	LMT	1912
			0:00	-	GMT	1963 Dec 15
			1:00	-	WAT

# Eritrea
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Asmara	2:35:32 -	LMT	1870
			2:35:32	-	AMT	1890	      # Asmara Mean Time
			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
			3:00	-	EAT

# Ethiopia
# From Paul Eggert (2006-03-22):
# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
# We'll guess that 38E50 is for Adis Dera.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
			3:00	-	EAT

# Gabon
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Libreville	0:37:48 -	LMT	1912
			1:00	-	WAT

# Gambia
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Banjul	-1:06:36 -	LMT	1912
			-1:06:36 -	BMT	1935	# Banjul Mean Time
			-1:00	-	WAT	1964
			 0:00	-	GMT

# Ghana
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
# Whitman says DST was observed from 1931 to ``the present'';
# go with Shanks & Pottenger.
Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	GHST
Rule	Ghana	1936	1942	-	Dec	31	0:00	0	GMT
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Accra	-0:00:52 -	LMT	1918
			 0:00	Ghana	%s

# Guinea
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Conakry	-0:54:52 -	LMT	1912
			 0:00	-	GMT	1934 Feb 26
			-1:00	-	WAT	1960
			 0:00	-	GMT

# Guinea-Bissau
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Bissau	-1:02:20 -	LMT	1911 May 26
			-1:00	-	WAT	1975
			 0:00	-	GMT

# Kenya
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
			3:00	-	EAT	1930
			2:30	-	BEAT	1940
			2:44:45	-	BEAUT	1960
			3:00	-	EAT

# Lesotho
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
			2:00	-	SAST	1943 Sep 19 2:00
			2:00	1:00	SAST	1944 Mar 19 2:00
			2:00	-	SAST

# Liberia
# From Paul Eggert (2006-03-22):
# In 1972 Liberia was the last country to switch
# from a UTC offset that was not a multiple of 15 or 20 minutes.
# Howse reports that it was in honor of their president's birthday.
# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
# go with Shanks & Pottenger.
# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
# Whitman each report -0:44:30; go with the more precise figure.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
			-0:43:08 -	MMT	1919 Mar # Monrovia Mean Time
			-0:44:30 -	LRT	1972 May # Liberia Time
			 0:00	-	GMT

###############################################################################

# Libya

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	S
Rule	Libya	1954	only	-	Jan	 1	0:00	0	-
Rule	Libya	1955	only	-	Sep	30	0:00	1:00	S
Rule	Libya	1956	only	-	Jan	 1	0:00	0	-
Rule	Libya	1982	1984	-	Apr	 1	0:00	1:00	S
Rule	Libya	1982	1985	-	Oct	 1	0:00	0	-
Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	S
Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	S
Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Tripoli	0:52:44 -	LMT	1920
			1:00	Libya	CE%sT	1959
			2:00	-	EET	1982
			1:00	Libya	CE%sT	1990 May  4
# The following entries are from Shanks & Pottenger;
# the IATA SSIM data contain some obvious errors.
			2:00	-	EET	1996 Sep 30
			1:00	-	CET	1997 Apr  4
			1:00	1:00	CEST	1997 Oct  4
			2:00	-	EET

# Madagascar
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Indian/Antananarivo 3:10:04 -	LMT	1911 Jul
			3:00	-	EAT	1954 Feb 27 23:00s
			3:00	1:00	EAST	1954 May 29 23:00s
			3:00	-	EAT

# Malawi
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Blantyre	2:20:00 -	LMT	1903 Mar
			2:00	-	CAT

# Mali
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Bamako	-0:32:00 -	LMT	1912
			 0:00	-	GMT	1934 Feb 26
			-1:00	-	WAT	1960 Jun 20
			 0:00	-	GMT

# Mauritania
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
			 0:00	-	GMT	1934 Feb 26
			-1:00	-	WAT	1960 Nov 28
			 0:00	-	GMT

# Mauritius

# From Steffen Thorsen (2008-06-25):
# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
# basis....
# It seems that Mauritius observed daylight saving time from 1982-10-10 to 
# 1983-03-20 as well, but that was not successful....
# http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html

# From Alex Krivenyshev (2008-06-25):
# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD

# From Arthur David Olson (2008-06-30):
# The www.timeanddate.com article cited by Steffen Thorsen notes that "A
# final decision has yet to be made on the times that daylight saving
# would begin and end on these dates." As a place holder, use midnight.

# From Paul Eggert (2008-06-30):
# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger.

# From Steffen Thorsen (2008-07-10):
# According to
# <a href="http://www.lexpress.mu/display_article.php?news_id=111216">
# http://www.lexpress.mu/display_article.php?news_id=111216
# </a>
# (in French), Mauritius will start and end their DST a few days earlier
# than previously announced (2008-11-01 to 2009-03-31).  The new start
# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
# given, but it is probably at either 2 or 3 wall clock time).
# 
# A little strange though, since the article says that they moved the date 
# to align itself with Europe and USA which also change time on that date, 
# but that means they have not paid attention to what happened in 
# USA/Canada last year (DST ends first Sunday in November). I also wonder 
# why that they end on a Friday, instead of aligning with Europe which 
# changes two days later.

# From Alex Krivenyshev (2008-07-11):
# Seems that English language article "The revival of daylight saving
# time:  Energy conservation?"-# No. 16578 (07/11/2008) was originally
# published on Monday, June 30, 2008...
#
# I guess that article in French "Le gouvernement avance l'introduction
# de l'heure d'ete" stating that DST in Mauritius starting on October 26
# and ending on March 27, 2009 is the most recent one.
# ...
# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html">
# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
# </a>

# From Riad M. Hossen Ally (2008-08-03):
# The Government of Mauritius weblink
# <a href="http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD">
# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
# </a>
# Cabinet Decision of July 18th, 2008 states as follows:
#
# 4. ...Cabinet has agreed to the introduction into the National Assembly
# of the Time Bill which provides for the introduction of summer time in
# Mauritius. The summer time period which will be of one hour ahead of
# the standard time, will be aligned with that in Europe and the United
# States of America. It will start at two o'clock in the morning on the
# last Sunday of October and will end at two o'clock in the morning on
# the last Sunday of March the following year. The summer time for the
# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
# and end on 29 March 2009.

# From Ed Maste (2008-10-07):
# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
# beginning / ending of summer time is 2 o'clock standard time in the
# morning of the last Sunday of October / last Sunday of March.
# <a href="http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf">
# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
# </a>

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule Mauritius	1982	only	-	Oct	10	0:00	1:00	S
Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
Rule Mauritius	2008	max	-	Oct	lastSun	2:00s	1:00	S
Rule Mauritius	2009	max	-	Mar	lastSun	2:00s	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
			4:00 Mauritius	MU%sT	# Mauritius Time
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius

# Mayotte
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
			3:00	-	EAT

# Morocco
# See the `europe' file for Spanish Morocco (Africa/Ceuta).

# From Alex Krivenyshev (2008-05-09):
# Here is an article that Morocco plan to introduce Daylight Saving Time between
# 1 June, 2008 and 27 September, 2008.
#
# "... Morocco is to save energy by adjusting its clock during summer so it will
# be one hour ahead of GMT between 1 June and 27 September, according to
# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
#
# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html">
# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
# </a>
# OR
# <a href="http://en.afrik.com/news11892.html">
# http://en.afrik.com/news11892.html
# </a>

# From Alex Krivenyshev (2008-05-09):
# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view">
# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
# </a>
#
# Morocco shifts to daylight time on June 1st through September 27, Govt.
# spokesman.

# From Patrice Scattolin (2008-05-09):
# According to this article:
# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html">
# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
# </a>
# (and republished here:
# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html">
# http://www.actu.ma/heure-dete-comment_i127896_0.html
# </a>
# )
# the changes occurs at midnight:
#
# saturday night may 31st at midnight (which in french is to be
# intrepreted as the night between saturday and sunday)
# sunday night the 28th  at midnight
#
# Seeing that the 28th is monday, I am guessing that she intends to say
# the midnight of the 28th which is the midnight between sunday and
# monday, which jives with other sources that say that it's inclusive
# june1st to sept 27th.
#
# The decision was taken by decree *2-08-224 *but I can't find the decree
# published on the web.
#
# It's also confirmed here:
# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm">
# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
# </a>
# on a government portal as being  between june 1st and sept 27th (not yet
# posted in english).
#
# The following google query will generate many relevant hits:
# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search">
# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
# </a>

# From Alex Krivenyshev (2008-05-09):
# Is Western Sahara (part which administrated by Morocco) going to follow
# Morocco DST changes?  Any information?  What about other part of
# Western Sahara - under administration of POLISARIO Front (also named
# SADR Saharawi Arab Democratic Republic)?

# From Arthur David Olson (2008-05-09):
# XXX--guess that it is only Morocco for now; guess only 2008 for now.

# From Steffen Thorsen (2008-08-27):
# Morocco will change the clocks back on the midnight between August 31 
# and September 1. They originally planned to observe DST to near the end 
# of September:
#
# One article about it (in French):
# <a href="http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default">
# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
# </a>
#
# We have some further details posted here:
# <a href="http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html">
# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
# </a>

# From Steffen Thorsen (2009-03-17):
# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
# to many sources, such as
# <a href="http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html">
# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
# </a>
# <a href="http://www.medi1sat.ma/fr/depeche.aspx?idp=2312">
# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
# </a>
# (French)
#
# Our summary:
# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html">
# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
# </a>

# From Alexander Krivenyshev (2009-03-17):
# Here is a link to official document from Royaume du Maroc Premier Ministre,
# Ministere de la Modernisation des Secteurs Publics
#
# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
# concerning the amendment of the legal time, the Ministry of Modernization of
# Public Sectors announced that the official time in the Kingdom will be
# advanced 60 minutes from Sunday 31 May 2009 at midnight.
#
# <a href="http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf">
# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
# </a>
#
# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco03.html">
# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
# </a>

# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S

Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	S
Rule	Morocco	1945	only	-	Nov	18	 0:00	0	-
Rule	Morocco	1950	only	-	Jun	11	 0:00	1:00	S
Rule	Morocco	1950	only	-	Oct	29	 0:00	0	-
Rule	Morocco	1967	only	-	Jun	 3	12:00	1:00	S
Rule	Morocco	1967	only	-	Oct	 1	 0:00	0	-
Rule	Morocco	1974	only	-	Jun	24	 0:00	1:00	S
Rule	Morocco	1974	only	-	Sep	 1	 0:00	0	-
Rule	Morocco	1976	1977	-	May	 1	 0:00	1:00	S
Rule	Morocco	1976	only	-	Aug	 1	 0:00	0	-
Rule	Morocco	1977	only	-	Sep	28	 0:00	0	-
Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	S
Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	S
Rule	Morocco	2009	only	-	Aug	 21	 0:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
			 0:00	Morocco	WE%sT	1984 Mar 16
			 1:00	-	CET	1986
			 0:00	Morocco	WE%sT
# Western Sahara
Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
			-1:00	-	WAT	1976 Apr 14
			 0:00	-	WET

# Mozambique
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
			2:00	-	CAT

# Namibia
# The 1994-04-03 transition is from Shanks & Pottenger.
# Shanks & Pottenger report no DST after 1998-04; go with IATA.

# From Petronella Sibeene (2007-03-30) in
# <http://allafrica.com/stories/200703300178.html>:
# While the entire country changes its time, Katima Mulilo and other
# settlements in Caprivi unofficially will not because the sun there
# rises and sets earlier compared to other regions.  Chief of
# Forecasting Riaan van Zyl explained that the far eastern parts of
# the country are close to 40 minutes earlier in sunrise than the rest
# of the country.
# 
# From Paul Eggert (2007-03-31):
# Apparently the Caprivi Strip informally observes Botswana time, but
# we have no details.  In the meantime people there can use Africa/Gaborone.

# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Namibia	1994	max	-	Sep	Sun>=1	2:00	1:00	S
Rule	Namibia	1995	max	-	Apr	Sun>=1	2:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
			1:30	-	SWAT	1903 Mar	# SW Africa Time
			2:00	-	SAST	1942 Sep 20 2:00
			2:00	1:00	SAST	1943 Mar 21 2:00
			2:00	-	SAST	1990 Mar 21 # independence
			2:00	-	CAT	1994 Apr  3
			1:00	Namibia	WA%sT

# Niger
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Niamey	 0:08:28 -	LMT	1912
			-1:00	-	WAT	1934 Feb 26
			 0:00	-	GMT	1960
			 1:00	-	WAT

# Nigeria
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
			1:00	-	WAT

# Reunion
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
			4:00	-	RET	# Reunion Time
#
# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
# The following information about them is taken from
# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
# no longer available as of 1999-08-17).
# We have no info about their time zone histories.
#
# Bassas da India - uninhabited
# Europa Island - inhabited from 1905 to 1910 by two families
# Glorioso Is - inhabited until at least 1958
# Juan de Nova - uninhabited
# Tromelin - inhabited until at least 1958

# Rwanda
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
			2:00	-	CAT

# St Helena
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
			-0:22:48 -	JMT	1951	# Jamestown Mean Time
			 0:00	-	GMT
# The other parts of the St Helena territory are similar:
#	Tristan da Cunha: on GMT, say Whitman and the CIA
#	Ascension: on GMT, says usno1995 and the CIA
#	Gough (scientific station since 1955; sealers wintered previously):
#		on GMT, says the CIA
#	Inaccessible, Nightingale: no information, but probably GMT

# Sao Tome and Principe
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
			-0:36:32 -	LMT	1912	# Lisbon Mean Time
			 0:00	-	GMT

# Senegal
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Dakar	-1:09:44 -	LMT	1912
			-1:00	-	WAT	1941 Jun
			 0:00	-	GMT

# Seychelles
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
			4:00	-	SCT	# Seychelles Time
# From Paul Eggert (2001-05-30):
# Aldabra, Farquhar, and Desroches, originally dependencies of the
# Seychelles, were transferred to the British Indian Ocean Territory
# in 1965 and returned to Seychelles control in 1976.  We don't know
# whether this affected their time zone, so omit this for now.
# Possibly the islands were uninhabited.

# Sierra Leone
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
Rule	SL	1935	1942	-	Jun	 1	0:00	0:40	SLST
Rule	SL	1935	1942	-	Oct	 1	0:00	0	WAT
Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	SLST
Rule	SL	1957	1962	-	Sep	 1	0:00	0	GMT
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Freetown	-0:53:00 -	LMT	1882
			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
			-1:00	SL	%s	1957
			 0:00	SL	%s

# Somalia
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Mogadishu	3:01:28 -	LMT	1893 Nov
			3:00	-	EAT	1931
			2:30	-	BEAT	1957
			3:00	-	EAT

# South Africa
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	SA	1942	1943	-	Sep	Sun>=15	2:00	1:00	-
Rule	SA	1943	1944	-	Mar	Sun>=15	2:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
			1:30	-	SAST	1903 Mar
			2:00	SA	SAST
# Marion and Prince Edward Is
# scientific station since 1947
# no information

# Sudan
#
# From <a href="http://www.sunanews.net/sn13jane.html">
# Sudan News Agency (2000-01-13)
# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
# Saturday....  This was announced Thursday by Caretaker State Minister for
# Manpower Abdul-Rahman Nur-Eddin.
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Sudan	1970	only	-	May	 1	0:00	1:00	S
Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	S
Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	S
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Khartoum	2:10:08 -	LMT	1931
			2:00	Sudan	CA%sT	2000 Jan 15 12:00
			3:00	-	EAT

# Swaziland
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Mbabane	2:04:24 -	LMT	1903 Mar
			2:00	-	SAST

# Tanzania
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Africa/Dar_es_Salaam 2:37:08 -	LMT	1931
			3:00	-	EAT	1948
			2:44:45	-	BEAUT	1961
			3:00	-	EAT

# Togo
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Lome	0:04:52 -	LMT	1893
			0:00	-	GMT

# Tunisia

# From Gwillim Law (2005-04-30):
# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
# this time in Tunisia.  According to Yahoo France News
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
# and dated 2005-04-26, "Tunisia has decided to advance its official time by
# one hour, starting on Sunday, May 1.  Henceforth, Tunisian time will be
# UTC+2 instead of UTC+1.  The change will take place at 23:00 UTC next
# Saturday."  (My translation)
#
# From Oscar van Vlijmen (2005-05-02):
# LaPresse, the first national daily newspaper ...
# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
# 1h standard time.
#
# From Atef Loukil (2006-03-28):
# The daylight saving time will be the same each year:
# Beginning      : the last Sunday of March at 02:00
# Ending         : the last Sunday of October at 03:00 ...
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50

# From Steffen Thorsen (2009-03-16):
# According to several news sources, Tunisia will not observe DST this year.
# (Arabic)
# <a href="http://www.elbashayer.com/?page=viewn&nid=42546">
# http://www.elbashayer.com/?page=viewn&nid=42546
# </a>
# <a href="http://www.babnet.net/kiwidetail-15295.asp">
# http://www.babnet.net/kiwidetail-15295.asp
# </a>
#
# We have also confirmed this with the US embassy in Tunisia.
# We have a wrap-up about this on the following page:
# <a href="http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html">
# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
# </a>

# From Alexander Krivenyshev (2009-03-17):
# Here is a link to Tunis Afrique Presse News Agency
#
# Standard time to be kept the whole year long (tap.info.tn):
#
# (in English)
# <a href="http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157">
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
# </a>
#
# (in Arabic)
# <a href="http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1">
# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
# </a>

# From Arthur David Olson (2009--3-18):
# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
# that the fasting month of ramadan coincides with the period concerned by summer time.
# Therefore, the standard time will be kept unchanged the whole year long."
# So foregoing DST seems to be an exception (albeit one that may be repeated in the  future).

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	S
Rule	Tunisia	1941	only	-	Oct	 6	 0:00	0	-
Rule	Tunisia	1942	only	-	Mar	 9	 0:00	1:00	S
Rule	Tunisia	1942	only	-	Nov	 2	 3:00	0	-
Rule	Tunisia	1943	only	-	Mar	29	 2:00	1:00	S
Rule	Tunisia	1943	only	-	Apr	17	 2:00	0	-
Rule	Tunisia	1943	only	-	Apr	25	 2:00	1:00	S
Rule	Tunisia	1943	only	-	Oct	 4	 2:00	0	-
Rule	Tunisia	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
Rule	Tunisia	1944	only	-	Oct	 8	 0:00	0	-
Rule	Tunisia	1945	only	-	Sep	16	 0:00	0	-
Rule	Tunisia	1977	only	-	Apr	30	 0:00s	1:00	S
Rule	Tunisia	1977	only	-	Sep	24	 0:00s	0	-
Rule	Tunisia	1978	only	-	May	 1	 0:00s	1:00	S
Rule	Tunisia	1978	only	-	Oct	 1	 0:00s	0	-
Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	S
Rule	Tunisia	1988	1990	-	Sep	lastSun	 0:00s	0	-
Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	S
Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	S
Rule	Tunisia	2005	only	-	May	 1	 0:00s	1:00	S
Rule	Tunisia	2005	only	-	Sep	30	 1:00s	0	-
Rule	Tunisia	2006	2008	-	Mar	lastSun	 2:00s	1:00	S
Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
Rule	Tunisia	2010	max	-	Mar	lastSun	 2:00s	1:00	S
Rule	Tunisia	2010	max	-	Oct	lastSun	 2:00s	0	-
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
			1:00	Tunisia	CE%sT

# Uganda
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Kampala	2:09:40 -	LMT	1928 Jul
			3:00	-	EAT	1930
			2:30	-	BEAT	1948
			2:44:45	-	BEAUT	1957
			3:00	-	EAT

# Zambia
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Lusaka	1:53:08 -	LMT	1903 Mar
			2:00	-	CAT

# Zimbabwe
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Africa/Harare	2:04:12 -	LMT	1903 Mar
			2:00	-	CAT
