78fd532000-07-12Mirar (Pontus Hagland) // ---------------------------------------------------------------- // Daylight savings and war time rules // // NOTE: this file is generated by mkrules.pike; // please do not edit manually /Mirar // ---------------------------------------------------------------- // ---------------------------------------------------------------- // all rules are based on the gregorian calendar, so // this is the gregorian rule: // ---------------------------------------------------------------- static array gregorian_yjd(int jd) { int d=jd-1721426; int century=(4*d+3)/146097; int century_jd=(century*146097)/4; int century_day=d-century_jd; int century_year=(100*century_day+75)/36525; int y=century*100+century_year+1; return ({ y, 1721426+century_year*365+century_year/4+century_jd, (!(((y)%4) || (!((y)%100) && ((y)%400)))) }); } // ---------------------------------------------------------------- // Base "Timezone with rules" class // ---------------------------------------------------------------- class TZRules { constant is_timezone=1; constant is_dst_timezone=1; static int offset_to_utc; string name; static function(string:string) tzformat; static array names; static void create(int offset,string _name) { offset_to_utc=offset; name=_name; if (search(name,"/")!=-1) { names=name/"/"; tzformat=lambda(string s) { if (s=="") return names[0]; else return names[1]; }; } else tzformat=lambda(string s) { return sprintf(name,s); }; } // the Rule: // which julian day does dst start and end this year? static array(array(string|int)) jd_year_periods(int jd); // is (midnight) this julian day dst? array tz_jd(int jd) { array(array(string|int)) a=jd_year_periods(jd); int i=0,n=sizeof(a)-1; while (i<n) { array b=a[i+1]; if (jd<b[0]) break; if (jd==b[0] && -offset_to_utc+b[1]>=0) break; i++; } return ({offset_to_utc-a[i][2],tzformat(a[i][3])}); } // is this unixtime (utc) dst? array tz_ux(int ux) { int jd=2440588+ux/86400; array(array(string|int)) a=jd_year_periods(jd); int i=0,n=sizeof(a)-1; while (i<n) { array b=a[i+1]; if (jd<b[0]-1) break; if (jd<b[0]+1 && ux<(b[0]-2440588)*86400+b[1]) break; i++; } return ({offset_to_utc-a[i][2],tzformat(a[i][3])}); } string _sprintf(int t) { return (t=='O')?"Timezone("+name+")":0; } int raw_utc_offset() { return offset_to_utc; } } // ---------------------------------------------------------------------- // DST Rules // ---------------------------------------------------------------------- // useful macros #define FIXED(D) (yjd+((D)-1)) #define FIX_L(D) (yjd+leap+((D)-1)) #define LDAY(D,W) (yjd+((D)-1)-( (yjd+((D)+(8-W)-1)) % 7)) #define LDAYL(D,W) (yjd+((D)-1)+leap-( (yjd+leap+((D)+(8-W)-1)) % 7)) #define UO offset_to_utc // ---------------------------------------------------------------------- class Algeria { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(166) ,UO+82800 ,3600 ,"S" }), // Jun 14 ({LDAY (281,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 case 1917: return ({({0 ,0 ,0 ,"" }), ({FIXED(83) ,UO+82800 ,3600 ,"S" }), // Mar 24 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(68) ,UO+82800 ,3600 ,"S" }), // Mar 9 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun<=7 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 ({FIXED(172) ,UO+82800 ,0 ,"" })});// Jun 21 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(254) ,UO+82800 ,3600 ,"S" }), // Sep 11 ({FIXED(323) ,UO+0 ,0 ,"" })});// Nov 19 case 1944: return ({({0 ,0 ,0 ,"" }), ({LDAY (98,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon<=7 ({FIXED(282) ,UO+3600 ,0 ,"" })});// Oct 8 case 1945: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon<=7 ({FIXED(259) ,UO+0 ,0 ,"" })});// Sep 16 case 1971: return ({({0 ,0 ,0 ,"" }), ({FIXED(115) ,UO+82800 ,3600 ,"S" }), // Apr 25 ({FIXED(269) ,UO+82800 ,0 ,"" })});// Sep 26 case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(126) ,UO+0 ,3600 ,"S" }), // May 6 ({FIXED(294) ,UO-3600 ,0 ,"" })});// Oct 21 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(83) ,UO+3600 ,3600 ,"S" }), // Mar 24 ({FIXED(265) ,UO+7200 ,0 ,"" })});// Sep 22 case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(116) ,UO+0 ,3600 ,"S" }), // Apr 25 ({FIXED(305) ,UO+3600 ,0 ,"" })});// Oct 31 default: // ..1915 and 1981.. case 1922..1938: case 1940..1943: case 1946..1970: case 1972..1976: case 1979: return ({({0 ,0 ,0 ,"" })}); } } } class Egypt { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1940: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(197) ,UO+0 ,3600 ,"S" }), // Jul 15 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1941: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+0 ,3600 ,"S" }), // Apr 15 ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 case 1942: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(300) ,UO-3600 ,0 ,"" })});// Oct 27 case 1943..1944: return ({({0 ,0 ,0 ,"" }), ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIX_L(305) ,UO-3600 ,0 ,"" })});// Nov 1 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(106) ,UO+0 ,3600 ,"S" }), // Apr 16 ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 default: // ..1939: case 1946..1956: return ({({0 ,0 ,0 ,"" })}); case 1957: return ({({0 ,0 ,0 ,"" }), ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1958: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1959..1965: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 ({FIX_L(273) ,UO+7200 ,0 ,"" })});// Sep 30 case 1982: return ({({0 ,0 ,0 ,"" }), ({FIXED(206) ,UO+3600 ,3600 ,"S" }), // Jul 25 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1983: return ({({0 ,0 ,0 ,"" }), ({FIXED(193) ,UO+3600 ,3600 ,"S" }), // Jul 12 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1989: return ({({0 ,0 ,0 ,"" }), ({FIXED(126) ,UO+3600 ,3600 ,"S" }), // May 6 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1966..1981: case 1984..1988: case 1990..1994: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 ({FIX_L(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1995..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(120,5),UO+0 ,3600 ,"S" }), // Apr lastFri ({LDAYL(273,4),UO+82800 ,0 ,"" })});// Sep lastThu } } } class Ghana { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1936..1942: return ({({0 ,0 ,0 ,"GMT" }), ({FIX_L(244) ,UO+0 ,1200 ,"GHST"}), // Sep 1 ({FIX_L(365) ,UO-1200 ,0 ,"GMT" })});// Dec 31 default: // ..1935 and 1943.. return ({({0 ,0 ,0 ,"GMT" })}); } } } class Libya { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1951: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(287) ,UO+7200 ,3600 ,"S" })});// Oct 14 case 1953: return ({({0 ,0 ,0 ,"" }), ({FIXED(282) ,UO+7200 ,3600 ,"S" })});// Oct 9 case 1955: return ({({0 ,0 ,0 ,"" }), ({FIXED(273) ,UO+0 ,3600 ,"S" })});// Sep 30 case 1952: case 1954: case 1956: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(1) ,UO-3600 ,0 ,"" })});// Jan 1 case 1985: return ({({0 ,0 ,0 ,"" }), ({FIXED(96) ,UO+0 ,3600 ,"S" }), // Apr 6 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1986: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+0 ,3600 ,"S" }), // Apr 4 ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 case 1982..1984: case 1987..1989: return ({({0 ,0 ,0 ,"" }), ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1990: return ({({0 ,0 ,0 ,"" }), ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 default: // ..1950 and 1991.. case 1957..1981: return ({({0 ,0 ,0 ,"" })}); } } } class Morocco { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1939: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(255) ,UO+0 ,3600 ,"S" }), // Sep 12 ({FIXED(323) ,UO-3600 ,0 ,"" })});// Nov 19 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(56) ,UO+0 ,3600 ,"S" })});// Feb 25 case 1941..1944: return ({({0 ,0 ,3600 ,"S" })}); case 1945: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(322) ,UO-3600 ,0 ,"" })});// Nov 18 case 1950: return ({({0 ,0 ,0 ,"" }), ({FIXED(162) ,UO+0 ,3600 ,"S" }), // Jun 11 ({FIXED(302) ,UO-3600 ,0 ,"" })});// Oct 29 case 1967: return ({({0 ,0 ,0 ,"" }), ({FIXED(154) ,UO+43200 ,3600 ,"S" }), // Jun 3 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(175) ,UO+0 ,3600 ,"S" }), // Jun 24 ({FIXED(244) ,UO-3600 ,0 ,"" })});// Sep 1 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(214) ,UO-3600 ,0 ,"" })});// Aug 1 case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 ({FIXED(216) ,UO-3600 ,0 ,"" })});// Aug 4 default: // ..1938 and 1979.. case 1946..1949: case 1951..1966: case 1968..1973: case 1975: return ({({0 ,0 ,0 ,"" })}); } } } class Namibia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1993: return ({({0 ,0 ,0 ,"" })});// ? case 1994: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (250,7),UO+7200 ,3600 ,"S" })});// Sep Sun>=1 case 1995..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(97,7) ,UO+3600 ,0 ,"" }), // Apr Sun>=1 ({LDAYL(250,7),UO+7200 ,3600 ,"S" })});// Sep Sun>=1 } } } class SL { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1935..1942: return ({({0 ,0 ,0 ,"WAT" }), ({FIX_L(152) ,UO+0 ,2400 ,"SLST"}), // Jun 1 ({FIX_L(274) ,UO-2400 ,0 ,"WAT" })});// Oct 1 default: // ..1934: case 1943..1956: return ({({0 ,0 ,0 ,"WAT" })}); case 1957: return ({({0 ,0 ,0 ,"WAT" }), ({FIXED(152) ,UO+0 ,3600 ,"SLST"}), // Jun 1 ({FIXED(244) ,UO-3600 ,0 ,"GMT" })});// Sep 1 case 1958..1962: return ({({0 ,0 ,0 ,"GMT" }), ({FIX_L(152) ,UO+0 ,3600 ,"SLST"}), // Jun 1 ({FIX_L(244) ,UO-3600 ,0 ,"GMT" })});// Sep 1 case 1963..: return ({({0 ,0 ,0 ,"GMT" })}); } } } class SA { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1942: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (264,7),UO+7200 ,3600 ,"" })});// Sep Sun>=15 case 1943: return ({({0 ,0 ,3600 ,"" }), ({LDAY (80,7) ,UO+3600 ,0 ,"" }), // Mar Sun>=15 ({LDAY (264,7),UO+7200 ,3600 ,"" })});// Sep Sun>=15 case 1944: return ({({0 ,0 ,3600 ,"" }), ({LDAY (81,7) ,UO+3600 ,0 ,"" })});// Mar Sun>=15 default: // ..1941 and 1945.. return ({({0 ,0 ,0 ,"" })}); } } } class Sudan { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1970: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(288) ,UO-3600 ,0 ,"" })});// Oct 15 case 1971: return ({({0 ,0 ,0 ,"" }), ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 ({FIXED(288) ,UO-3600 ,0 ,"" })});// Oct 15 case 1972..1985: return ({({0 ,0 ,0 ,"" }), ({LDAYL(120,7),UO+0 ,3600 ,"S" }), // Apr lastSun ({FIX_L(288) ,UO-3600 ,0 ,"" })});// Oct 15 default: // ..1969 and 1986.. return ({({0 ,0 ,0 ,"" })}); } } } class Tunisia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1939: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(56) ,UO+82800 ,3600 ,"S" })});// Feb 25 case 1941: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(279) ,UO-3600 ,0 ,"" })});// Oct 6 case 1942: return ({({0 ,0 ,0 ,"" }), ({FIXED(68) ,UO+0 ,3600 ,"S" }), // Mar 9 ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 case 1943: return ({({0 ,0 ,0 ,"" }), ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 ({FIXED(107) ,UO+3600 ,0 ,"" }), // Apr 17 ({FIXED(115) ,UO+7200 ,3600 ,"S" }), // Apr 25 ({FIXED(277) ,UO+3600 ,0 ,"" })});// Oct 4 case 1944: return ({({0 ,0 ,0 ,"" }), ({LDAY (98,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon>=1 ({FIXED(282) ,UO-3600 ,0 ,"" })});// Oct 8 case 1945: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,1) ,UO+7200 ,3600 ,"S" }), // Apr Mon>=1 ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 ({FIXED(267) ,UO+0 ,0 ,"" })});// Sep 24 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 case 1988: return ({({0 ,0 ,0 ,"" }), ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun case 1989: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1990: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun default: // ..1938 and 1991.. case 1946..1976: case 1979..1987: return ({({0 ,0 ,0 ,"" })}); } } } class ArgAQ { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1964: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(61) ,UO+0 ,0 ,"" }), // Mar 1 ({FIXED(289) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1965..1966: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1967: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(23) ,UO+0 ,3600 ,"S" }), // Jan 23 ({FIXED(121) ,UO-3600 ,0 ,"" }), // May 1 ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 case 1968: case 1975..1976: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(97,7) ,UO-3600 ,0 ,"" }), // Apr Sun<=7 ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun<=7 case 1969: case 1977: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (97,7) ,UO-3600 ,0 ,"" })});// Apr Sun<=7 default: // ..1963 and 1978.. case 1970..1973: return ({({0 ,0 ,0 ,"" })}); } } } class ChileAQ { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1968: return ({({0 ,0 ,0 ,"" })});// ? case 1969: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 case 1998: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 ({FIXED(270) ,UO+0 ,3600 ,"S" })});// Sep 27 case 1999: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(94) ,UO-3600 ,0 ,"" }), // Apr 4 ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 case 1970..1997: case 2000..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 ({LDAYL(288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 } } } class NZAQ { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1973: return ({({0 ,0 ,0 ,"S" })});// ? case 1974: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(307) ,UO+7200 ,3600 ,"D" })});// Nov 3 case 1975: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(54) ,UO+7200 ,0 ,"S" }), // Feb 23 ({LDAY (304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun case 1976..1988: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun case 1989: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 ({FIXED(281) ,UO+7200 ,3600 ,"D" })});// Oct 8 case 1990..: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=15 ({LDAYL(280,7),UO+7200 ,3600 ,"D" })});// Oct Sun>=1 } } } class EUAsia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1980: return ({({0 ,0 ,0 ,"" })});// ? case 1981: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (90,7) ,3600 ,3600 ,"S" })});// Mar lastSun case 1982..1995: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(90,7) ,3600 ,3600 ,"S" })});// Mar lastSun case 1996: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (91,7) ,3600 ,3600 ,"S" }), // Mar lastSun ({LDAY (305,7),3600 ,0 ,"" })});// Oct lastSun case 1997..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),3600 ,0 ,"" })});// Oct lastSun } } } class E_EurAsia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1978: return ({({0 ,0 ,0 ,"" })});// ? case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1981..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun } } } class RussiaAsia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1980: return ({({0 ,0 ,0 ,"" })});// ? case 1981..1983: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1984: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 ({LDAY (274,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1992: return ({({0 ,0 ,0 ,"" }), ({LDAY (91,6) ,UO+82800 ,3600 ,"S" }), // Mar lastSat ({LDAY (274,6),UO+79200 ,0 ,"" })});// Sep lastSat case 1985..1991: case 1993..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun } } } class Azer { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1996: return ({({0 ,0 ,0 ,"" })});// ? case 1997..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+0 ,0 ,"" })});// Oct lastSun } } } class Shang { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1940: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(155) ,UO+0 ,3600 ,"D" }), // Jun 3 ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1941: return ({({0 ,0 ,0 ,"S" }), ({FIXED(75) ,UO+0 ,3600 ,"D" }), // Mar 16 ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 default: // ..1939 and 1942.. return ({({0 ,0 ,0 ,"S" })}); } } } class PRC { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1949: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(1) ,UO+0 ,0 ,"S" })});// Jan 1 case 1986: return ({({0 ,0 ,0 ,"S" }), ({FIXED(124) ,UO+0 ,3600 ,"D" }), // May 4 ({LDAY (260,7),UO-3600 ,0 ,"S" })});// Sep Sun>=11 case 1987..1991: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(106,7),UO+0 ,3600 ,"D" }), // Apr Sun>=10 ({LDAYL(260,7),UO-3600 ,0 ,"S" })});// Sep Sun>=11 default: // ..1948 and 1992.. case 1950..1985: return ({({0 ,0 ,0 ,"S" })}); } } } class HK { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1946: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(110) ,UO+12600 ,3600 ,"S" }), // Apr 20 ({FIXED(335) ,UO+9000 ,0 ,"" })});// Dec 1 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(103) ,UO+12600 ,3600 ,"S" }), // Apr 13 ({FIXED(364) ,UO+9000 ,0 ,"" })});// Dec 30 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(123) ,UO+12600 ,3600 ,"S" }), // May 2 ({LDAY (305,7),UO+9000 ,0 ,"" })});// Oct lastSun case 1949..1952: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+12600 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(304,7),UO+9000 ,0 ,"" })});// Oct lastSun case 1953: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+12600 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(305) ,UO+9000 ,0 ,"" })});// Nov 1 case 1954: return ({({0 ,0 ,0 ,"" }), ({LDAY (83,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=18 ({FIXED(304) ,UO+9000 ,0 ,"" })});// Oct 31 case 1955..1964: return ({({0 ,0 ,0 ,"" }), ({LDAYL(83,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=18 ({LDAYL(311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 case 1965..1977: return ({({0 ,0 ,0 ,"" }), ({LDAYL(112,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=16 ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(134,7),UO+12600 ,3600 ,"S" }), // May Sun>=8 ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 default: // ..1945 and 1981.. case 1978: return ({({0 ,0 ,0 ,"" })}); } } } class Taiwan { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1945..1951: return ({({0 ,0 ,0 ,"S" }), ({FIX_L(121) ,UO+0 ,3600 ,"D" }), // May 1 ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1952: return ({({0 ,0 ,0 ,"S" }), ({FIXED(61) ,UO+0 ,3600 ,"D" }), // Mar 1 ({FIXED(306) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1953..1954: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1960..1961: return ({({0 ,0 ,0 ,"S" }), ({FIX_L(152) ,UO+0 ,3600 ,"D" }), // Jun 1 ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1955..1959: case 1974..1975: return ({({0 ,0 ,0 ,"S" }), ({FIX_L(91) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIX_L(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1980: return ({({0 ,0 ,0 ,"S" }), ({FIXED(182) ,UO+0 ,3600 ,"D" }), // Jun 30 ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Sep 30 default: // ..1944 and 1981.. case 1962..1973: case 1976..1979: return ({({0 ,0 ,0 ,"S" })}); } } } class Macao { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1963: return ({({0 ,0 ,0 ,"" }), ({LDAY (81,7) ,UO+0 ,3600 ,"S" }), // Mar Sun>=16 ({LDAY (311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 case 1961..1962: case 1964: return ({({0 ,0 ,0 ,"" }), ({LDAYL(81,7) ,UO+12600 ,3600 ,"S" }), // Mar Sun>=16 ({LDAYL(311,7),UO+9000 ,0 ,"" })});// Nov Sun>=1 case 1965: return ({({0 ,0 ,0 ,"" }), ({LDAY (81,7) ,UO+0 ,3600 ,"S" }), // Mar Sun>=16 ({FIXED(304) ,UO-3600 ,0 ,"" })});// Oct 31 case 1966..1971: return ({({0 ,0 ,0 ,"" }), ({LDAYL(112,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=16 ({LDAYL(295,7),UO+9000 ,0 ,"" })});// Oct Sun>=16 case 1974: return ({({0 ,0 ,0 ,"" }), ({LDAY (111,7),UO+0 ,3600 ,"S" }), // Apr Sun>=15 ({LDAY (294,7),UO+9000 ,0 ,"" })});// Oct Sun>=15 case 1975..1977: return ({({0 ,0 ,0 ,"" }), ({LDAYL(111,7),UO+12600 ,3600 ,"S" }), // Apr Sun>=15 ({LDAYL(294,7),UO+9000 ,0 ,"" })});// Oct Sun>=15 case 1972..1973: case 1978..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(111,7),UO+0 ,3600 ,"S" }), // Apr Sun>=15 ({LDAYL(294,7),UO-3600 ,0 ,"" })});// Oct Sun>=15 default: // ..1960 and 1981.. return ({({0 ,0 ,0 ,"" })}); } } } class Cyprus { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1974: return ({({0 ,0 ,0 ,"" })});// ? case 1975: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(103) ,UO+0 ,3600 ,"S" }), // Apr 13 ({FIXED(285) ,UO-3600 ,0 ,"" })});// Oct 12 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(136) ,UO+0 ,3600 ,"S" }), // May 15 ({FIXED(285) ,UO-3600 ,0 ,"" })});// Oct 11 case 1977: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(268) ,UO-3600 ,0 ,"" })});// Sep 25 case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1981..1997: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1998: return ({({0 ,0 ,0 ,"" }), ({LDAY (90,7) ,UO+0 ,3600 ,"S" })});// Mar lastSun case 1999..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Iran { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1978: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(80) ,UO+0 ,3600 ,"S" }), // Mar 21 ({FIXED(294) ,UO-3600 ,0 ,"" })});// Oct 21 case 1979: return ({({0 ,0 ,0 ,"" }), ({FIXED(80) ,UO+0 ,3600 ,"S" }), // Mar 21 ({FIXED(262) ,UO-3600 ,0 ,"" })});// Sep 19 case 1991: return ({({0 ,0 ,0 ,"" }), ({FIXED(123) ,UO+0 ,3600 ,"S" }), // May 3 ({FIXED(263) ,UO+0 ,0 ,"" })});// Sep 20 case 1980: case 1992..1995: case 1997..1999: case 2001..2003: case 2005..2007: case 2009..2011: case 2013..2015: case 2017..2019: case 2021..2023: case 2026..2027: case 2030..2031: case 2034..2035: return ({({0 ,0 ,0 ,"" }), ({FIX_L(80) ,UO+0 ,3600 ,"S" }), // Mar 21 ({FIX_L(266) ,UO-3600 ,0 ,"" })});// Sep 23 case 1996: case 2000: case 2004: case 2008: case 2012: case 2016: case 2020: case 2024..2025: case 2028..2029: case 2032..2033: case 2036..2037: return ({({0 ,0 ,0 ,"" }), ({FIX_L(79) ,UO+0 ,3600 ,"S" }), // Mar 20 ({FIX_L(265) ,UO-3600 ,0 ,"" })});// Sep 22 default: // ..1977 and 2038.. case 1981..1990: return ({({0 ,0 ,0 ,"" })}); } } } class Iraq { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1981: return ({({0 ,0 ,0 ,"S" })});// ? case 1982: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1983: return ({({0 ,0 ,0 ,"S" }), ({FIXED(90) ,UO+0 ,3600 ,"D" }), // Mar 31 ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1984: return ({({0 ,0 ,0 ,"S" }), ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1985: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1986..1990: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(90,7) ,UO+3600 ,3600 ,"D" }), // Mar lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1991: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+10800 ,3600 ,"D" }), // Apr 1 ({FIXED(274) ,UO+10800 ,0 ,"D" })});// Oct 1 case 1992..: return ({({0 ,0 ,0 ,"D" }), ({FIX_L(91) ,UO+10800 ,3600 ,"D" }), // Apr 1 ({FIX_L(274) ,UO+10800 ,0 ,"D" })});// Oct 1 } } } class Zion { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1940: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(153) ,UO+0 ,3600 ,"D" })});// Jun 1 case 1941: return ({({0 ,0 ,3600 ,"D" })}); case 1942: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1943: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+7200 ,3600 ,"D" }), // Apr 1 ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1944: return ({({0 ,0 ,0 ,"S" }), ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(306) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1945: return ({({0 ,0 ,0 ,"S" }), ({FIXED(106) ,UO+0 ,3600 ,"D" }), // Apr 16 ({FIXED(305) ,UO+3600 ,0 ,"S" })});// Nov 1 case 1946: return ({({0 ,0 ,0 ,"S" }), ({FIXED(106) ,UO+7200 ,3600 ,"D" }), // Apr 16 ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1948: return ({({0 ,0 ,0 ,"S" }), ({FIXED(144) ,UO+0 ,7200 ,"DD" }), // May 23 ({FIXED(245) ,UO-7200 ,3600 ,"D" }), // Sep 1 ({FIXED(306) ,UO+3600 ,0 ,"S" })});// Nov 1 case 1949: return ({({0 ,0 ,0 ,"S" }), ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 ({FIXED(305) ,UO+3600 ,0 ,"S" })});// Nov 1 case 1950: return ({({0 ,0 ,0 ,"S" }), ({FIXED(106) ,UO+0 ,3600 ,"D" }), // Apr 16 ({FIXED(258) ,UO+7200 ,0 ,"S" })});// Sep 15 case 1951: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(315) ,UO+7200 ,0 ,"S" })});// Nov 11 case 1952: return ({({0 ,0 ,0 ,"S" }), ({FIXED(111) ,UO+7200 ,3600 ,"D" }), // Apr 20 ({FIXED(293) ,UO+7200 ,0 ,"S" })});// Oct 19 case 1953: return ({({0 ,0 ,0 ,"S" }), ({FIXED(102) ,UO+7200 ,3600 ,"D" }), // Apr 12 ({FIXED(256) ,UO+7200 ,0 ,"S" })});// Sep 13 case 1954: return ({({0 ,0 ,0 ,"S" }), ({FIXED(164) ,UO+0 ,3600 ,"D" }), // Jun 13 ({FIXED(255) ,UO-3600 ,0 ,"S" })});// Sep 12 case 1955: return ({({0 ,0 ,0 ,"S" }), ({FIXED(162) ,UO+7200 ,3600 ,"D" }), // Jun 11 ({FIXED(254) ,UO-3600 ,0 ,"S" })});// Sep 11 case 1956: return ({({0 ,0 ,0 ,"S" }), ({FIXED(155) ,UO+0 ,3600 ,"D" }), // Jun 3 ({FIXED(274) ,UO+7200 ,0 ,"S" })});// Sep 30 case 1957: return ({({0 ,0 ,0 ,"S" }), ({FIXED(119) ,UO+7200 ,3600 ,"D" }), // Apr 29 ({FIXED(265) ,UO-3600 ,0 ,"S" })});// Sep 22 case 1974: return ({({0 ,0 ,0 ,"S" }), ({FIXED(188) ,UO+0 ,3600 ,"D" }), // Jul 7 ({FIXED(286) ,UO-3600 ,0 ,"S" })});// Oct 13 case 1975: return ({({0 ,0 ,0 ,"S" }), ({FIXED(110) ,UO+0 ,3600 ,"D" }), // Apr 20 ({FIXED(243) ,UO-3600 ,0 ,"S" })});// Aug 31 default: // ..1939: case 1947: case 1958..1973: case 1976..1984: return ({({0 ,0 ,0 ,"S" })}); case 1985: return ({({0 ,0 ,0 ,"S" }), ({FIXED(104) ,UO+0 ,3600 ,"D" }), // Apr 14 ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 15 case 1986: return ({({0 ,0 ,0 ,"S" }), ({FIXED(138) ,UO+0 ,3600 ,"D" }), // May 18 ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 7 case 1987: return ({({0 ,0 ,0 ,"S" }), ({FIXED(105) ,UO+0 ,3600 ,"D" }), // Apr 15 ({FIXED(256) ,UO-3600 ,0 ,"S" })});// Sep 13 case 1988: return ({({0 ,0 ,0 ,"S" }), ({FIXED(100) ,UO+0 ,3600 ,"D" }), // Apr 9 ({FIXED(247) ,UO-3600 ,0 ,"S" })});// Sep 3 case 1989: return ({({0 ,0 ,0 ,"S" }), ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 case 1990: return ({({0 ,0 ,0 ,"S" }), ({FIXED(84) ,UO+0 ,3600 ,"D" }), // Mar 25 ({FIXED(238) ,UO-3600 ,0 ,"S" })});// Aug 26 case 1991: return ({({0 ,0 ,0 ,"S" }), ({FIXED(83) ,UO+0 ,3600 ,"D" }), // Mar 24 ({FIXED(244) ,UO-3600 ,0 ,"S" })});// Sep 1 case 1992: return ({({0 ,0 ,0 ,"S" }), ({FIXED(89) ,UO+0 ,3600 ,"D" }), // Mar 29 ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 6 case 1993: return ({({0 ,0 ,0 ,"S" }), ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 2 ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 case 1994: return ({({0 ,0 ,0 ,"S" }), ({FIXED(91) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(240) ,UO-3600 ,0 ,"S" })});// Aug 28 case 1995: return ({({0 ,0 ,0 ,"S" }), ({FIXED(90) ,UO+0 ,3600 ,"D" }), // Mar 31 ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 case 1996: return ({({0 ,0 ,0 ,"S" }), ({FIXED(75) ,UO+0 ,3600 ,"D" }), // Mar 15 ({FIXED(260) ,UO-3600 ,0 ,"S" })});// Sep 16 case 1997: return ({({0 ,0 ,0 ,"S" }), ({FIXED(80) ,UO+0 ,3600 ,"D" }), // Mar 21 ({FIXED(257) ,UO-3600 ,0 ,"S" })});// Sep 14 case 1998: return ({({0 ,0 ,0 ,"S" }), ({FIXED(79) ,UO+0 ,3600 ,"D" }), // Mar 20 ({FIXED(249) ,UO-3600 ,0 ,"S" })});// Sep 6 case 1999: return ({({0 ,0 ,0 ,"S" }), ({FIXED(92) ,UO+7200 ,3600 ,"D" }), // Apr 2 ({FIXED(246) ,UO+3600 ,0 ,"S" })});// Sep 3 case 2000: return ({({0 ,0 ,0 ,"S" }), ({FIXED(105) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(296) ,UO+3600 ,0 ,"S" })});// Oct 22 case 2001: return ({({0 ,0 ,0 ,"S" }), ({FIXED(96) ,UO+7200 ,3600 ,"D" }), // Apr 6 ({FIXED(283) ,UO+3600 ,0 ,"S" })});// Oct 10 case 2002: return ({({0 ,0 ,0 ,"S" }), ({FIXED(88) ,UO+7200 ,3600 ,"D" }), // Mar 29 ({FIXED(272) ,UO+3600 ,0 ,"S" })});// Sep 29 case 2003..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(90,5) ,UO+7200 ,3600 ,"D" }), // Mar Fri>=25 ({FIX_L(274) ,UO+3600 ,0 ,"S" })});// Oct 1 } } } class Jordan { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1973: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(157) ,UO+0 ,3600 ,"S" }), // Jun 6 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(306) ,UO-3600 ,0 ,"" })});// Nov 1 case 1974..1975: case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 default: // ..1972: case 1979..1984: return ({({0 ,0 ,0 ,"" })}); case 1985: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1989: return ({({0 ,0 ,0 ,"" }), ({FIXED(128) ,UO+0 ,3600 ,"S" }), // May 8 ({LDAY (280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 case 1990: return ({({0 ,0 ,0 ,"" }), ({FIXED(117) ,UO+0 ,3600 ,"S" }), // Apr 27 ({LDAY (280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 case 1991: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+0 ,3600 ,"S" }), // Apr 17 ({FIXED(270) ,UO-3600 ,0 ,"" })});// Sep 27 case 1992: return ({({0 ,0 ,0 ,"" }), ({FIXED(101) ,UO+0 ,3600 ,"S" }), // Apr 10 ({LDAY (281,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 case 1986..1988: case 1993: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 ({LDAYL(280,5),UO-3600 ,0 ,"" })});// Oct Fri>=1 case 1994: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 ({LDAY (264,5),UO-3600 ,0 ,"" })});// Sep Fri>=15 case 1995..1998: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,5) ,UO+0 ,3600 ,"S" }), // Apr Fri>=1 ({LDAYL(264,5),UO+0 ,0 ,"" })});// Sep Fri>=15 case 1999: return ({({0 ,0 ,0 ,"" }), ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jul 1 ({LDAY (273,4),UO+0 ,0 ,"" })});// Sep lastThu case 2000..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,4) ,UO+0 ,3600 ,"S" }), // Mar lastThu ({LDAYL(273,4),UO+0 ,0 ,"" })});// Sep lastThu } } } class Kirgiz { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1991: return ({({0 ,0 ,0 ,"" })});// ? case 1992..1996: return ({({0 ,0 ,0 ,"" }), ({LDAYL(103,7),UO+0 ,3600 ,"S" }), // Apr Sun>=7 ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1997..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+9000 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+5400 ,0 ,"" })});// Oct lastSun } } } class ROK { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1960: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(136) ,UO+0 ,3600 ,"D" }), // May 15 ({FIXED(257) ,UO-3600 ,0 ,"S" })});// Sep 13 case 1987..1988: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(134,7),UO+0 ,3600 ,"D" }), // May Sun<=14 ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun<=14 default: // ..1959 and 1989.. case 1961..1986: return ({({0 ,0 ,0 ,"S" })}); } } } class Lebanon { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(88) ,UO+0 ,3600 ,"S" }), // Mar 28 ({FIXED(299) ,UO-3600 ,0 ,"" })});// Oct 25 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 case 1922: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 case 1923: return ({({0 ,0 ,0 ,"" }), ({FIXED(112) ,UO+0 ,3600 ,"S" }), // Apr 22 ({FIXED(259) ,UO-3600 ,0 ,"" })});// Sep 16 case 1972: return ({({0 ,0 ,0 ,"" }), ({FIXED(174) ,UO+0 ,3600 ,"S" }), // Jun 22 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1957..1961: case 1973..1977: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(120) ,UO+0 ,3600 ,"S" }), // Apr 30 ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 default: // ..1919: case 1924..1956: case 1962..1971: case 1979..1983: return ({({0 ,0 ,0 ,"" })}); case 1988: return ({({0 ,0 ,0 ,"" }), ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 ({FIXED(290) ,UO-3600 ,0 ,"" })});// Oct 16 case 1989: return ({({0 ,0 ,0 ,"" }), ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 ({FIXED(289) ,UO-3600 ,0 ,"" })});// Oct 16 case 1984..1987: case 1990..1991: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIX_L(289) ,UO-3600 ,0 ,"" })});// Oct 16 case 1992: return ({({0 ,0 ,0 ,"" }), ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(278) ,UO-3600 ,0 ,"" })});// Oct 4 case 1993..1998: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1999..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun } } } class NBorneo { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1935..1941: return ({({0 ,0 ,0 ,"" }), ({FIX_L(257) ,UO+0 ,1200 ,"TS" }), // Sep 14 ({FIX_L(348) ,UO-1200 ,0 ,"" })});// Dec 14 default: // ..1934 and 1942.. return ({({0 ,0 ,0 ,"" })}); } } } class Mongol { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1981..1984: return ({({0 ,0 ,0 ,"" }), ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1985..1990: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1996: return ({({0 ,0 ,0 ,"" }), ({LDAY (91,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAY (305,7),UO-3600 ,0 ,"" })});// Oct lastSun case 1991..1995: case 1997..1998: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun default: // ..1980 and 1999.. return ({({0 ,0 ,0 ,"" })}); } } } class EgyptAsia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1956: return ({({0 ,0 ,0 ,"" })});// ? case 1957: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(130) ,UO+0 ,3600 ,"S" }), // May 10 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1958: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1959..1965: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+3600 ,3600 ,"S" }), // May 1 ({FIX_L(273) ,UO+7200 ,0 ,"" })});// Sep 30 case 1966: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+3600 ,3600 ,"S" }), // May 1 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1967: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+3600 ,3600 ,"S" })});// May 1 case 1968..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Palestine { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1998: return ({({0 ,0 ,0 ,"" })});// ? case 1999..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(111,5),UO+0 ,3600 ,"S" }), // Apr Fri>=15 ({LDAYL(294,5),UO-3600 ,0 ,"" })});// Oct Fri>=15 } } } class Phil { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1936: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 1 case 1937: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(32) ,UO-3600 ,0 ,"" })});// Feb 1 case 1954: return ({({0 ,0 ,0 ,"" }), ({FIXED(102) ,UO+0 ,3600 ,"S" }), // Apr 12 ({FIXED(182) ,UO-3600 ,0 ,"" })});// Jul 1 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(81) ,UO+0 ,3600 ,"S" }), // Mar 22 ({FIXED(264) ,UO-3600 ,0 ,"" })});// Sep 21 default: // ..1935 and 1979.. case 1938..1953: case 1955..1977: return ({({0 ,0 ,0 ,"" })}); } } } class Syria { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920..1923: return ({({0 ,0 ,0 ,"" }), ({LDAYL(111,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=15 ({LDAYL(280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 case 1962: return ({({0 ,0 ,0 ,"" }), ({FIXED(119) ,UO+7200 ,3600 ,"S" }), // Apr 29 ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 case 1963: case 1965: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 ({FIXED(273) ,UO+3600 ,0 ,"" })});// Sep 30 case 1966: return ({({0 ,0 ,0 ,"" }), ({FIXED(114) ,UO+7200 ,3600 ,"S" }), // Apr 24 ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 case 1964: case 1967..1976: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+7200 ,3600 ,"S" }), // May 1 ({FIX_L(274) ,UO+3600 ,0 ,"" })});// Oct 1 case 1977..1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 ({FIXED(244) ,UO+3600 ,0 ,"" })});// Sep 1 case 1983..1984: return ({({0 ,0 ,0 ,"" }), ({FIX_L(99) ,UO+7200 ,3600 ,"S" }), // Apr 9 ({FIX_L(274) ,UO+3600 ,0 ,"" })});// Oct 1 default: // ..1919: case 1924..1961: case 1979..1982: case 1985: return ({({0 ,0 ,0 ,"" })}); case 1986: return ({({0 ,0 ,0 ,"" }), ({FIXED(47) ,UO+7200 ,3600 ,"S" }), // Feb 16 ({FIXED(282) ,UO+3600 ,0 ,"" })});// Oct 9 case 1987: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+7200 ,3600 ,"S" }), // Mar 1 ({FIXED(304) ,UO+3600 ,0 ,"" })});// Oct 31 case 1988: return ({({0 ,0 ,0 ,"" }), ({FIXED(75) ,UO+7200 ,3600 ,"S" }), // Mar 15 ({FIXED(305) ,UO+3600 ,0 ,"" })});// Oct 31 case 1989: return ({({0 ,0 ,0 ,"" }), ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 case 1990: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+7200 ,3600 ,"S" }), // Apr 1 ({FIXED(273) ,UO+3600 ,0 ,"" })});// Sep 30 case 1992: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+0 ,3600 ,"S" }), // Apr 8 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1993: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 ({FIXED(268) ,UO-3600 ,0 ,"" })});// Sep 25 case 1997..1998: return ({({0 ,0 ,0 ,"" }), ({LDAY (90,1) ,UO+0 ,3600 ,"S" }), // Mar lastMon ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1991: case 1994..1996: case 1999..: return ({({0 ,0 ,0 ,"" }), ({FIX_L(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 } } } class Aus { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1917: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(1) ,UO+60 ,3600 ,"" }), // Jan 1 ({FIXED(84) ,UO+3600 ,0 ,"" })});// Mar 25 case 1942: return ({({0 ,0 ,0 ,"" }), ({FIXED(1) ,UO+7200 ,3600 ,"" }), // Jan 1 ({FIXED(88) ,UO+3600 ,0 ,"" }), // Mar 29 ({FIXED(270) ,UO+7200 ,3600 ,"" })});// Sep 27 case 1943: return ({({0 ,0 ,3600 ,"" }), ({LDAY (90,7) ,UO+3600 ,0 ,"" }), // Mar lastSun ({FIXED(276) ,UO+7200 ,3600 ,"" })});// Oct 3 case 1944: return ({({0 ,0 ,3600 ,"" }), ({LDAY (91,7) ,UO+3600 ,0 ,"" })});// Mar lastSun default: // ..1916 and 1945.. case 1918..1941: return ({({0 ,0 ,0 ,"" })}); } } } class AQ { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1972: return ({({0 ,0 ,3600 ,"" }), ({LDAY (60,7) ,UO+7200 ,0 ,"" })});// Feb lastSun case 1971: case 1989: return ({({0 ,0 ,0 ,"" }), ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1990..1991: return ({({0 ,0 ,3600 ,"" }), ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1992: return ({({0 ,0 ,3600 ,"" }), ({LDAY (67,7) ,UO+7200 ,0 ,"" })});// Mar Sun>=1 default: // ..1970 and 1993.. case 1973..1988: return ({({0 ,0 ,0 ,"" })}); } } } class Holiday { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1992: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1993: return ({({0 ,0 ,3600 ,"" }), ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1994: return ({({0 ,0 ,3600 ,"" }), ({LDAY (66,7) ,UO+7200 ,0 ,"" })});// Mar Sun>=1 default: // ..1991 and 1995.. return ({({0 ,0 ,0 ,"" })}); } } } class AS { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1970: return ({({0 ,0 ,0 ,"" })});// ? case 1971: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1972: return ({({0 ,0 ,3600 ,"" }), ({FIXED(58) ,UO+7200 ,0 ,"" }), // Feb 27 ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1986: return ({({0 ,0 ,3600 ,"" }), ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({FIXED(292) ,UO+7200 ,3600 ,"" })});// Oct 19 case 1987..1989: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1973..1985: case 1991: case 1993: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1990: case 1992: case 1994: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(83,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=18 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1995..: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun } } } class AT { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1966: return ({({0 ,0 ,0 ,"" })});// ? case 1967: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (280,7),UO+7200 ,3600 ,"" })});// Oct Sun>=1 case 1969..1971: return ({({0 ,0 ,3600 ,"" }), ({LDAY (73,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=8 ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1972: return ({({0 ,0 ,3600 ,"" }), ({LDAY (60,7) ,UO+7200 ,0 ,"" }), // Feb lastSun ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1968: case 1982..1983: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1973..1981: case 1984..1985: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1986: return ({({0 ,0 ,3600 ,"" }), ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAY (294,7),UO+7200 ,3600 ,"" })});// Oct Sun>=15 case 1987: return ({({0 ,0 ,3600 ,"" }), ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAY (301,7),UO+7200 ,3600 ,"" })});// Oct Sun>=22 case 1988..1990: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 2000: return ({({0 ,0 ,3600 ,"" }), ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun case 1991..1999: case 2001..: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(280,7),UO+7200 ,3600 ,"" })});// Oct Sun>=1 } } } class AV { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1970: return ({({0 ,0 ,0 ,"" })});// ? case 1971: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1972: return ({({0 ,0 ,3600 ,"" }), ({LDAY (60,7) ,UO+7200 ,0 ,"" }), // Feb lastSun ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1986..1987: return ({({0 ,0 ,3600 ,"" }), ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAY (294,7),UO+7200 ,3600 ,"" })});// Oct Sun>=15 case 1988..1990: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1973..1985: case 1991..1994: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 2000: return ({({0 ,0 ,3600 ,"" }), ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun case 1995..1999: case 2001..: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun } } } class AN { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1970: return ({({0 ,0 ,0 ,"" })});// ? case 1971: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1972: return ({({0 ,0 ,3600 ,"" }), ({FIXED(58) ,UO+7200 ,0 ,"" }), // Feb 27 ({LDAY (305,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1982: return ({({0 ,0 ,3600 ,"" }), ({LDAY (97,7) ,UO+7200 ,0 ,"" }), // Apr Sun>=1 ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1986: return ({({0 ,0 ,3600 ,"" }), ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({FIXED(292) ,UO+7200 ,3600 ,"" })});// Oct 19 case 1987..1989: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1973..1981: case 1983..1985: case 1990..1995: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 2000: return ({({0 ,0 ,3600 ,"" }), ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAY (244,7),UO+7200 ,3600 ,"" })});// Aug lastSun case 1996..1999: case 2001..: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun } } } class LH { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1980: return ({({0 ,0 ,0 ,"" })});// ? case 1981: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1982..1984: return ({({0 ,0 ,3600 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"" })});// Oct lastSun case 1985: return ({({0 ,0 ,3600 ,"" }), ({LDAY (66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAY (304,7),UO+7200 ,1800 ,"" })});// Oct lastSun case 1986: return ({({0 ,0 ,1800 ,"" }), ({LDAY (80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({FIXED(292) ,UO+7200 ,1800 ,"" })});// Oct 19 case 1987..1989: return ({({0 ,0 ,1800 ,"" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=15 ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun case 1990..1995: return ({({0 ,0 ,1800 ,"" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun case 2000: return ({({0 ,0 ,1800 ,"" }), ({LDAY (91,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAY (244,7),UO+7200 ,1800 ,"" })});// Aug lastSun case 1996..1999: case 2001..: return ({({0 ,0 ,1800 ,"" }), ({LDAYL(90,7) ,UO+7200 ,0 ,"" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,1800 ,"" })});// Oct lastSun } } } class Cook { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1978: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(316) ,UO+0 ,1800 ,"HS" })});// Nov 12 case 1979..1990: return ({({0 ,0 ,1800 ,"HS" }), ({LDAYL(66,7) ,UO-1800 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(304,7),UO+0 ,1800 ,"HS" })});// Oct lastSun case 1991: return ({({0 ,0 ,1800 ,"HS" }), ({LDAY (66,7) ,UO-1800 ,0 ,"" })});// Mar Sun>=1 default: // ..1977 and 1992.. return ({({0 ,0 ,0 ,"" })}); } } } class Fiji { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1997: return ({({0 ,0 ,0 ,"" })});// ? case 1998: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (311,7),UO+7200 ,3600 ,"S" })});// Nov Sun>=1 case 1999..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(59,7) ,UO+7200 ,0 ,"" }), // Feb lastSun ({LDAYL(311,7),UO+7200 ,3600 ,"S" })});// Nov Sun>=1 } } } class NC { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1977: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (341,7),UO+0 ,3600 ,"S" })});// Dec Sun>=1 case 1978: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(58) ,UO-3600 ,0 ,"" }), // Feb 27 ({LDAY (341,7),UO+0 ,3600 ,"S" })});// Dec Sun>=1 case 1979: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(58) ,UO-3600 ,0 ,"" })});// Feb 27 case 1996: return ({({0 ,0 ,0 ,"" }), ({FIXED(336) ,UO+7200 ,3600 ,"S" })});// Dec 1 case 1997: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(61) ,UO+7200 ,0 ,"" })});// Mar 2 default: // ..1976 and 1998.. case 1980..1995: return ({({0 ,0 ,0 ,"" })}); } } } class NZ { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1927: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(330) ,UO+7200 ,1800 ,"HD" })});// Nov 26 case 1928: return ({({0 ,0 ,1800 ,"HD" }), ({LDAY (67,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=1 ({FIXED(309) ,UO+7200 ,1800 ,"HD" })});// Nov 4 case 1929: return ({({0 ,0 ,1800 ,"HD" }), ({LDAY (66,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=1 ({FIXED(303) ,UO+7200 ,1800 ,"HD" })});// Oct 30 case 1930..1933: return ({({0 ,0 ,1800 ,"HD" }), ({LDAYL(80,7) ,UO+5400 ,0 ,"S" }), // Mar Sun>=15 ({LDAYL(287,7),UO+7200 ,1800 ,"HD" })});// Oct Sun>=8 case 1934..1939: return ({({0 ,0 ,1800 ,"HD" }), ({LDAYL(120,7),UO+5400 ,0 ,"S" }), // Apr lastSun ({LDAYL(273,7),UO+7200 ,1800 ,"HD" })});// Sep lastSun case 1940: return ({({0 ,0 ,1800 ,"HD" }), ({LDAY (121,7),UO+5400 ,0 ,"S" })});// Apr lastSun default: // ..1926: case 1941..1973: return ({({0 ,0 ,0 ,"S" })}); case 1974: return ({({0 ,0 ,0 ,"S" }), ({FIXED(307) ,UO+7200 ,3600 ,"D" })});// Nov 3 case 1975: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(54) ,UO+7200 ,0 ,"S" }), // Feb 23 ({LDAY (304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun case 1976..1988: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 ({LDAYL(304,7),UO+7200 ,3600 ,"D" })});// Oct lastSun case 1989: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (66,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=1 ({FIXED(281) ,UO+7200 ,3600 ,"D" })});// Oct 8 case 1990..: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(80,7) ,UO+7200 ,0 ,"S" }), // Mar Sun>=15 ({LDAYL(280,7),UO+7200 ,3600 ,"D" })});// Oct Sun>=1 } } } class Chatham { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1989: return ({({0 ,0 ,0 ,"S" })});// ? case 1990: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (280,7),UO+9900 ,3600 ,"D" })});// Oct Sun>=1 case 1991..: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(80,7) ,UO+9900 ,0 ,"S" }), // Mar Sun>=15 ({LDAYL(280,7),UO+9900 ,3600 ,"D" })});// Oct Sun>=1 } } } class Tonga { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1998: return ({({0 ,0 ,0 ,"" })});// ? case 1999: return ({({0 ,0 ,0 ,"" }), // ? ({LDAY (280,6),UO+7200 ,3600 ,"S" })});// Oct Sat>=1 case 2000..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(112,7),UO+7200 ,0 ,"" }), // Apr Sun>=16 ({LDAYL(280,6),UO+7200 ,3600 ,"S" })});// Oct Sat>=1 } } } class Vanuatu { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1983: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(268) ,UO+0 ,3600 ,"S" })});// Sep 25 case 1984: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (89,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=23 ({FIXED(297) ,UO+0 ,3600 ,"S" })});// Oct 23 case 1985..1991: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(88,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=23 ({LDAYL(272,7),UO+0 ,3600 ,"S" })});// Sep Sun>=23 case 1992: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (29,7) ,UO-3600 ,0 ,"" }), // Jan Sun>=23 ({LDAY (303,7),UO+0 ,3600 ,"S" })});// Oct Sun>=23 case 1993: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (29,7) ,UO-3600 ,0 ,"" })});// Jan Sun>=23 default: // ..1982 and 1994.. return ({({0 ,0 ,0 ,"" })}); } } } class GB_Eire { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"GMT" }), // ? ({FIXED(142) ,UO+7200 ,3600 ,"BST" }), // May 21 ({FIXED(275) ,UO+7200 ,0 ,"GMT" })});// Oct 1 case 1917: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(98) ,UO+7200 ,3600 ,"BST" }), // Apr 8 ({FIXED(260) ,UO+7200 ,0 ,"GMT" })});// Sep 17 case 1918: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(83) ,UO+7200 ,3600 ,"BST" }), // Mar 24 ({FIXED(273) ,UO+7200 ,0 ,"GMT" })});// Sep 30 case 1919: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(89) ,UO+7200 ,3600 ,"BST" }), // Mar 30 ({FIXED(272) ,UO+7200 ,0 ,"GMT" })});// Sep 29 case 1920: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(88) ,UO+7200 ,3600 ,"BST" }), // Mar 28 ({FIXED(299) ,UO+7200 ,0 ,"GMT" })});// Oct 25 case 1921: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(93) ,UO+7200 ,3600 ,"BST" }), // Apr 3 ({FIXED(276) ,UO+7200 ,0 ,"GMT" })});// Oct 3 case 1922: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(85) ,UO+7200 ,3600 ,"BST" }), // Mar 26 ({FIXED(281) ,UO+7200 ,0 ,"GMT" })});// Oct 8 case 1923: return ({({0 ,0 ,0 ,"GMT" }), ({LDAY (112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 ({LDAY (265,7),UO+7200 ,0 ,"GMT" })});// Sep Sun>=16 case 1924: return ({({0 ,0 ,0 ,"GMT" }), ({LDAY (106,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=9 ({LDAY (266,7),UO+7200 ,0 ,"GMT" })});// Sep Sun>=16 case 1939: return ({({0 ,0 ,0 ,"GMT" }), ({LDAY (112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 ({LDAY (326,7),UO+7200 ,0 ,"GMT" })});// Nov Sun>=16 case 1940: return ({({0 ,0 ,0 ,"GMT" }), ({LDAY (61,7) ,UO+7200 ,3600 ,"BST" })});// Feb Sun>=23 case 1941: return ({({0 ,0 ,3600 ,"BST" }), ({LDAY (128,7),UO+3600 ,7200 ,"BDST"}), // May Sun>=2 ({LDAY (227,7),UO+3600 ,3600 ,"BST" })});// Aug Sun>=9 case 1942..1943: return ({({0 ,0 ,3600 ,"BST" }), ({LDAY (98,7) ,UO+3600 ,7200 ,"BDST"}), // Apr Sun>=2 ({LDAY (227,7),UO+3600 ,3600 ,"BST" })});// Aug Sun>=9 case 1944: return ({({0 ,0 ,3600 ,"BST" }), ({LDAY (99,7) ,UO+3600 ,7200 ,"BDST"}), // Apr Sun>=2 ({LDAY (266,7),UO+3600 ,3600 ,"BST" })});// Sep Sun>=16 case 1945: return ({({0 ,0 ,3600 ,"BST" }), ({LDAY (98,1) ,UO+3600 ,7200 ,"BDST"}), // Apr Mon>=2 ({LDAY (196,7),UO+3600 ,3600 ,"BST" }), // Jul Sun>=9 ({LDAY (281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 case 1947: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(75) ,UO+7200 ,3600 ,"BST" }), // Mar 16 ({FIXED(103) ,UO+3600 ,7200 ,"BDST"}), // Apr 13 ({FIXED(222) ,UO+3600 ,3600 ,"BST" }), // Aug 10 ({FIXED(306) ,UO+7200 ,0 ,"GMT" })});// Nov 2 case 1948: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(74) ,UO+7200 ,3600 ,"BST" }), // Mar 14 ({FIXED(305) ,UO+7200 ,0 ,"GMT" })});// Oct 31 case 1949: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(93) ,UO+7200 ,3600 ,"BST" }), // Apr 3 ({FIXED(303) ,UO+7200 ,0 ,"GMT" })});// Oct 30 case 1950..1952: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(110,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=14 ({LDAYL(300,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=21 case 1925..1926: case 1928..1929: case 1931..1932: case 1934: case 1936..1937: case 1953: case 1955..1956: case 1958..1959: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(112,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=16 ({LDAYL(281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 case 1927: case 1930: case 1933: case 1935: case 1938: case 1946: case 1954: case 1957: case 1960: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(105,7),UO+7200 ,3600 ,"BST" }), // Apr Sun>=9 ({LDAYL(281,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=2 case 1961..1963: return ({({0 ,0 ,0 ,"GMT" }), ({LDAY (90,7) ,UO+7200 ,3600 ,"BST" }), // Mar lastSun ({LDAY (302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 case 1964..1967: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(84,7) ,UO+7200 ,3600 ,"BST" }), // Mar Sun>=19 ({LDAYL(302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 case 1968: return ({({0 ,0 ,0 ,"GMT" }), ({FIXED(49) ,UO+7200 ,3600 ,"BST" }), // Feb 18 ({LDAY (303,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 case 1972..1980: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(81,7) ,UO+7200 ,3600 ,"BST" }), // Mar Sun>=16 ({LDAYL(302,7),UO+7200 ,0 ,"GMT" })});// Oct Sun>=23 case 1981..1989: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(90,7) ,3600 ,3600 ,"BST" }), // Mar lastSun ({LDAYL(302,7),3600 ,0 ,"GMT" })});// Oct Sun>=23 case 1990..1995: return ({({0 ,0 ,0 ,"GMT" }), ({LDAYL(90,7) ,3600 ,3600 ,"BST" }), // Mar lastSun ({LDAYL(301,7),3600 ,0 ,"GMT" })});// Oct Sun>=22 default: // ..1915 and 1996.. case 1969..1971: return ({({0 ,0 ,0 ,"GMT" })}); } } } class EU { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1976: return ({({0 ,0 ,0 ,"" })});// ? case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,3600 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(274) ,3600 ,0 ,"" })});// Oct 1 case 1977: case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,3600 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(273,7),3600 ,0 ,"" })});// Sep lastSun case 1981..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),3600 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),3600 ,0 ,"" })});// Oct lastSun } } } class W_Eur { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1976: return ({({0 ,0 ,0 ,"" })});// ? case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(274) ,UO+3600 ,0 ,"" })});// Oct 1 case 1977: case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1981..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+3600 ,0 ,"" })});// Oct lastSun } } } class C_Eur { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(121) ,UO+82800 ,3600 ,"S" }), // Apr 30 ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 case 1917..1918: return ({({0 ,0 ,0 ,"" }), ({LDAY (111,1),UO+7200 ,3600 ,"S" }), // Apr Mon>=15 ({LDAY (264,1),UO+7200 ,0 ,"" })});// Sep Mon>=15 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" })});// Apr 1 case 1941: return ({({0 ,0 ,3600 ,"S" })}); case 1942: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 case 1943: return ({({0 ,0 ,0 ,"" }), ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 ({FIXED(277) ,UO+7200 ,0 ,"" })});// Oct 4 case 1944: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 3 ({FIXED(276) ,UO+7200 ,0 ,"" })});// Oct 2 default: // ..1915: case 1919..1939: case 1945..1976: return ({({0 ,0 ,0 ,"" })}); case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1977: case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1981..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun } } } class E_Eur { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1976: return ({({0 ,0 ,0 ,"" })});// ? case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1977: case 1979..1980: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1981..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO-3600 ,0 ,"" })});// Oct lastSun } } } class Russia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1916: return ({({0 ,0 ,0 ,"MMT" })});// ? case 1917: return ({({0 ,0 ,0 ,"MMT" }), // ? ({FIXED(182) ,UO+82800 ,3600 ,"MST" }), // Jul 1 ({FIXED(362) ,UO-3600 ,0 ,"MMT" })});// Dec 28 case 1918: return ({({0 ,0 ,0 ,"MMT" }), ({FIXED(151) ,UO+79200 ,7200 ,"MDST"}), // May 31 ({FIXED(259) ,UO-3600 ,3600 ,"MST" })});// Sep 16 case 1919: return ({({0 ,0 ,3600 ,"MST" }), ({FIXED(151) ,UO+79200 ,7200 ,"MDST"}), // May 31 ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jul 1 ({FIXED(228) ,UO-3600 ,0 ,"" })});// Aug 16 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 ({FIXED(79) ,UO+79200 ,7200 ,"M" }), // Mar 20 ({FIXED(244) ,UO-7200 ,3600 ,"S" }), // Sep 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1920: case 1922..1980: return ({({0 ,0 ,0 ,"" })}); case 1981..1983: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1984: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 ({LDAY (274,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1992: return ({({0 ,0 ,0 ,"" }), ({LDAY (91,6) ,UO+82800 ,3600 ,"S" }), // Mar lastSat ({LDAY (274,6),UO+79200 ,0 ,"" })});// Sep lastSat case 1985..1991: case 1993..1995: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun case 1996..: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(304,7),UO+7200 ,0 ,"" })});// Oct lastSun } } } class Albania { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1940: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(168) ,UO+0 ,3600 ,"S" })});// Jun 16 case 1942: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 case 1943: return ({({0 ,0 ,0 ,"" }), ({FIXED(88) ,UO+7200 ,3600 ,"S" }), // Mar 29 ({FIXED(100) ,UO+7200 ,0 ,"" })});// Apr 10 default: // ..1939: case 1944..1973: return ({({0 ,0 ,0 ,"" })}); case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 4 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 case 1975: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(128) ,UO+0 ,3600 ,"S" }), // May 8 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(126) ,UO+0 ,3600 ,"S" }), // May 6 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1979: return ({({0 ,0 ,0 ,"" }), ({FIXED(125) ,UO+0 ,3600 ,"S" }), // May 5 ({FIXED(273) ,UO-3600 ,0 ,"" })});// Sep 30 case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 3 ({FIXED(278) ,UO-3600 ,0 ,"" })});// Oct 4 case 1981: return ({({0 ,0 ,0 ,"" }), ({FIXED(116) ,UO+0 ,3600 ,"S" }), // Apr 26 ({FIXED(270) ,UO-3600 ,0 ,"" })});// Sep 27 case 1976: case 1982: return ({({0 ,0 ,0 ,"" }), ({FIX_L(122) ,UO+0 ,3600 ,"S" }), // May 2 ({FIX_L(276) ,UO-3600 ,0 ,"" })});// Oct 3 case 1983: return ({({0 ,0 ,0 ,"" }), ({FIXED(108) ,UO+0 ,3600 ,"S" }), // Apr 18 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1984: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+0 ,3600 ,"S" })});// Apr 1 case 1941: case 1985..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Austria { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 5 ({FIXED(257) ,UO+7200 ,0 ,"" })});// Sep 13 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(104) ,UO+7200 ,3600 ,"S" }), // Apr 14 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 6 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 default: // ..1919 and 1949.. case 1921..1944: return ({({0 ,0 ,0 ,"" })}); } } } class Belgium { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(68) ,UO+0 ,3600 ,"S" }), // Mar 9 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 ({FIXED(298) ,UO+82800 ,0 ,"" })});// Oct 25 case 1922: return ({({0 ,0 ,0 ,"" }), ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1923: return ({({0 ,0 ,0 ,"" }), ({FIXED(111) ,UO+82800 ,3600 ,"S" }), // Apr 21 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1925: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+82800 ,3600 ,"S" }), // Apr 4 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1926: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1928: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 ({LDAY (282,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1929: return ({({0 ,0 ,0 ,"" }), ({FIXED(111) ,UO+7200 ,3600 ,"S" }), // Apr 21 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1930: return ({({0 ,0 ,0 ,"" }), ({FIXED(103) ,UO+7200 ,3600 ,"S" }), // Apr 13 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1932: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 3 ({LDAY (282,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1933: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+7200 ,3600 ,"S" }), // Mar 26 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1934: return ({({0 ,0 ,0 ,"" }), ({FIXED(98) ,UO+7200 ,3600 ,"S" }), // Apr 8 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1935: return ({({0 ,0 ,0 ,"" }), ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1931: case 1936: return ({({0 ,0 ,0 ,"" }), ({FIX_L(109) ,UO+7200 ,3600 ,"S" }), // Apr 19 ({LDAYL(281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1937: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+7200 ,3600 ,"S" }), // Apr 4 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1938: return ({({0 ,0 ,0 ,"" }), ({FIXED(86) ,UO+7200 ,3600 ,"S" }), // Mar 27 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(106) ,UO+7200 ,3600 ,"S" }), // Apr 16 ({FIXED(323) ,UO+7200 ,0 ,"" })});// Nov 19 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(56) ,UO+7200 ,3600 ,"S" })});// Feb 25 case 1941..1943: return ({({0 ,0 ,3600 ,"S" })}); case 1944: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(261) ,UO+7200 ,0 ,"" })});// Sep 17 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(139) ,UO+7200 ,3600 ,"S" }), // May 19 ({FIXED(280) ,UO+7200 ,0 ,"" })});// Oct 7 default: // ..1917 and 1947.. return ({({0 ,0 ,0 ,"" })}); } } } class Bulg { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1978: return ({({0 ,0 ,0 ,"" })});// ? case 1979: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(90) ,UO+82800 ,3600 ,"S" }), // Mar 31 ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 case 1980: return ({({0 ,0 ,0 ,"" }), ({LDAY (98,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat<=7 ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 29 case 1981: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat<=7 ({FIXED(270) ,UO+3600 ,0 ,"" })});// Sep 27 case 1982: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,6) ,UO+82800 ,3600 ,"S" })});// Apr Sat<=7 case 1983..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Czech { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1945: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(98) ,UO+7200 ,3600 ,"S" }), // Apr 8 ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(126) ,UO+7200 ,3600 ,"S" }), // May 6 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+7200 ,3600 ,"S" }), // Apr 20 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1949: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+7200 ,3600 ,"S" }), // Apr 9 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 default: // ..1944 and 1950.. return ({({0 ,0 ,0 ,"" })}); } } } class Denmark { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(135) ,UO+82800 ,3600 ,"S" }), // May 14 ({FIXED(274) ,UO+79200 ,0 ,"" })});// Sep 30 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(136) ,UO+0 ,3600 ,"S" })});// May 15 case 1941..1944: return ({({0 ,0 ,3600 ,"S" })}); case 1945: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(227) ,UO+7200 ,0 ,"" })});// Aug 15 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+7200 ,3600 ,"S" }), // May 1 ({FIXED(244) ,UO+7200 ,0 ,"" })});// Sep 1 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(124) ,UO+7200 ,3600 ,"S" }), // May 4 ({FIXED(222) ,UO+7200 ,0 ,"" })});// Aug 10 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(130) ,UO+7200 ,3600 ,"S" }), // May 9 ({FIXED(221) ,UO+7200 ,0 ,"" })});// Aug 8 default: // ..1915 and 1949.. case 1917..1939: return ({({0 ,0 ,0 ,"" })}); } } } class Thule { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1992: return ({({0 ,0 ,0 ,"S" })});// ? case 1993..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Finland { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1942: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 default: // ..1941 and 1943.. return ({({0 ,0 ,0 ,"" })}); } } } class France { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(166) ,UO+82800 ,3600 ,"S" }), // Jun 14 ({LDAY (281,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 case 1917: return ({({0 ,0 ,0 ,"" }), ({FIXED(83) ,UO+82800 ,3600 ,"S" }), // Mar 24 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(68) ,UO+82800 ,3600 ,"S" }), // Mar 9 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 ({LDAY (280,7),UO+82800 ,0 ,"" })});// Oct Sun>=1 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 ({FIXED(297) ,UO+82800 ,0 ,"" })});// Oct 23 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 ({FIXED(298) ,UO+82800 ,0 ,"" })});// Oct 25 case 1923: return ({({0 ,0 ,0 ,"" }), ({FIXED(146) ,UO+82800 ,3600 ,"S" }), // May 26 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1925: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+82800 ,3600 ,"S" }), // Apr 4 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1926: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1928: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1929: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1930: return ({({0 ,0 ,0 ,"" }), ({FIXED(102) ,UO+82800 ,3600 ,"S" }), // Apr 12 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1932: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 2 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1922: case 1933: return ({({0 ,0 ,0 ,"" }), ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1934: return ({({0 ,0 ,0 ,"" }), ({FIXED(97) ,UO+82800 ,3600 ,"S" }), // Apr 7 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1935: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 30 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1931: case 1936: return ({({0 ,0 ,0 ,"" }), ({FIX_L(108) ,UO+82800 ,3600 ,"S" }), // Apr 18 ({LDAYL(280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1937: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 3 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1938: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+82800 ,3600 ,"S" }), // Mar 26 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(56) ,UO+7200 ,3600 ,"S" })});// Feb 25 case 1941: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(125) ,UO-3600 ,7200 ,"M" }), // May 5 ({FIXED(279) ,UO-7200 ,3600 ,"S" })});// Oct 6 case 1942: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(68) ,UO-3600 ,7200 ,"M" }), // Mar 9 ({FIXED(306) ,UO+3600 ,3600 ,"S" })});// Nov 2 case 1943: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(88) ,UO+3600 ,7200 ,"M" }), // Mar 29 ({FIXED(277) ,UO+3600 ,3600 ,"S" })});// Oct 4 case 1944: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(94) ,UO+3600 ,7200 ,"M" }), // Apr 3 ({FIXED(282) ,UO-3600 ,3600 ,"S" })});// Oct 8 case 1945: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(92) ,UO+3600 ,7200 ,"M" }), // Apr 2 ({FIXED(259) ,UO+3600 ,0 ,"" })});// Sep 16 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(88) ,UO+3600 ,3600 ,"S" }), // Mar 28 ({FIXED(270) ,UO+0 ,0 ,"" })});// Sep 26 default: // ..1915 and 1977.. case 1946..1975: return ({({0 ,0 ,0 ,"" })}); } } } class Germany { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1945: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(151) ,UO+7200 ,7200 ,"M" }), // May 31 ({FIXED(266) ,UO+3600 ,3600 ,"S" }), // Sep 23 ({FIXED(322) ,UO+7200 ,0 ,"" })});// Nov 18 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(104) ,UO+7200 ,3600 ,"S" }), // Apr 14 ({FIXED(280) ,UO+7200 ,0 ,"" })});// Oct 7 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(96) ,UO+7200 ,3600 ,"S" }), // Apr 6 ({FIXED(131) ,UO+7200 ,7200 ,"M" }), // May 11 ({FIXED(180) ,UO+3600 ,3600 ,"S" }), // Jun 29 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(109) ,UO+7200 ,3600 ,"S" }), // Apr 18 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1949: return ({({0 ,0 ,0 ,"" }), ({FIXED(100) ,UO+7200 ,3600 ,"S" }), // Apr 10 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 default: // ..1944 and 1950.. return ({({0 ,0 ,0 ,"" })}); } } } class Greece { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1932: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(189) ,UO+0 ,3600 ,"S" }), // Jul 7 ({FIXED(245) ,UO-3600 ,0 ,"" })});// Sep 1 case 1941: return ({({0 ,0 ,0 ,"" }), ({FIXED(97) ,UO+0 ,3600 ,"S" })});// Apr 7 case 1942: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(306) ,UO+7200 ,0 ,"" })});// Nov 2 case 1943: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+0 ,3600 ,"S" }), // Mar 30 ({FIXED(277) ,UO-3600 ,0 ,"" })});// Oct 4 case 1952: return ({({0 ,0 ,0 ,"" }), ({FIXED(183) ,UO+0 ,3600 ,"S" }), // Jul 1 ({FIXED(307) ,UO-3600 ,0 ,"" })});// Nov 2 case 1975: return ({({0 ,0 ,0 ,"" }), ({FIXED(102) ,UO+0 ,3600 ,"S" }), // Apr 12 ({FIXED(330) ,UO+0 ,0 ,"" })});// Nov 26 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(102) ,UO+7200 ,3600 ,"S" }), // Apr 11 ({FIXED(284) ,UO+7200 ,0 ,"" })});// Oct 10 case 1977: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(269) ,UO+7200 ,0 ,"" })});// Sep 26 case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(267) ,UO+10800 ,0 ,"" })});// Sep 24 case 1979: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+32400 ,3600 ,"S" }), // Apr 1 ({FIXED(272) ,UO+3600 ,0 ,"" })});// Sep 29 case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(272) ,UO-3600 ,0 ,"" })});// Sep 28 default: // ..1931 and 1981.. case 1933..1940: case 1944..1951: case 1953..1974: return ({({0 ,0 ,0 ,"" })}); } } } class Hungary { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(91) ,UO+10800 ,3600 ,"S" }), // Apr 1 ({FIXED(272) ,UO+7200 ,0 ,"" })});// Sep 29 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+10800 ,3600 ,"S" }), // Apr 15 ({FIXED(258) ,UO+7200 ,0 ,"" })});// Sep 15 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(96) ,UO+10800 ,3600 ,"S" }), // Apr 5 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Sep 30 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+82800 ,3600 ,"S" }), // May 1 ({FIXED(307) ,UO-3600 ,0 ,"" })});// Nov 3 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 ({LDAY (280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1947..1949: return ({({0 ,0 ,0 ,"" }), ({LDAYL(100,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=4 ({LDAYL(280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 case 1950: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+7200 ,3600 ,"S" }), // Apr 17 ({FIXED(296) ,UO+7200 ,0 ,"" })});// Oct 23 case 1954..1955: return ({({0 ,0 ,0 ,"" }), ({FIXED(143) ,UO+0 ,3600 ,"S" }), // May 23 ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 case 1956: return ({({0 ,0 ,0 ,"" }), ({LDAY (159,7),UO+0 ,3600 ,"S" }), // Jun Sun>=1 ({LDAY (274,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1957: return ({({0 ,0 ,0 ,"" }), ({LDAY (158,7),UO+3600 ,3600 ,"S" }), // Jun Sun>=1 ({LDAY (273,7),UO+7200 ,0 ,"" })});// Sep lastSun default: // ..1917: case 1921..1944: case 1951..1953: case 1958..1979: return ({({0 ,0 ,0 ,"" })}); case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(97) ,UO+3600 ,3600 ,"S" })});// Apr 6 case 1981..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Iceland { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1917: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(50) ,UO+82800 ,3600 ,"S" }), // Feb 19 ({FIXED(294) ,UO+0 ,0 ,"" })});// Oct 21 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(50) ,UO+82800 ,3600 ,"S" }), // Feb 19 ({FIXED(320) ,UO+0 ,0 ,"" })});// Nov 16 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(119) ,UO+82800 ,3600 ,"S" }), // Apr 29 ({FIXED(333) ,UO+3600 ,0 ,"" })});// Nov 29 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(56) ,UO+7200 ,3600 ,"S" }), // Feb 25 ({FIXED(308) ,UO+3600 ,0 ,"" })});// Nov 3 case 1941: return ({({0 ,0 ,0 ,"" }), ({FIXED(61) ,UO+3600 ,3600 ,"S" }), // Mar 2 ({FIXED(306) ,UO+3600 ,0 ,"" })});// Nov 2 case 1942: return ({({0 ,0 ,0 ,"" }), ({FIXED(67) ,UO+3600 ,3600 ,"S" }), // Mar 8 ({FIXED(298) ,UO+3600 ,0 ,"" })});// Oct 25 case 1943..1946: return ({({0 ,0 ,0 ,"" }), ({LDAYL(66,7) ,UO+3600 ,3600 ,"S" }), // Mar Sun>=1 ({LDAYL(301,7),UO+3600 ,0 ,"" })});// Oct Sun>=22 case 1949: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(303) ,UO+3600 ,0 ,"" })});// Oct 30 case 1947..1948: case 1950..1966: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(301,7),UO+3600 ,0 ,"" })});// Oct Sun>=22 case 1967: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+3600 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(302) ,UO+3600 ,0 ,"" })});// Oct 29 default: // ..1916 and 1968.. case 1919..1938: return ({({0 ,0 ,0 ,"" })}); } } } class Italy { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(155) ,UO+0 ,3600 ,"S" }), // Jun 3 ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 case 1917: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(69) ,UO+0 ,3600 ,"S" }), // Mar 10 ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(61) ,UO+0 ,3600 ,"S" }), // Mar 2 ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(81) ,UO+0 ,3600 ,"S" }), // Mar 21 ({FIXED(263) ,UO+0 ,0 ,"" })});// Sep 19 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(167) ,UO+0 ,3600 ,"S" })});// Jun 15 case 1941..1943: return ({({0 ,0 ,3600 ,"S" })}); case 1944: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(261) ,UO+0 ,0 ,"" })});// Sep 17 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(258) ,UO+0 ,0 ,"" })});// Sep 15 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(76) ,UO+7200 ,3600 ,"S" }), // Mar 17 ({FIXED(279) ,UO+7200 ,0 ,"" })});// Oct 6 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(75) ,UO+0 ,3600 ,"S" }), // Mar 16 ({FIXED(278) ,UO+0 ,0 ,"" })});// Oct 5 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+7200 ,3600 ,"S" }), // Feb 29 ({FIXED(277) ,UO+7200 ,0 ,"" })});// Oct 3 case 1966..1968: return ({({0 ,0 ,0 ,"" }), ({LDAYL(148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({LDAYL(271,7),UO-3600 ,0 ,"" })});// Sep Sun>=22 case 1969: return ({({0 ,0 ,0 ,"" }), ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 ({LDAY (271,7),UO-3600 ,0 ,"" })});// Sep Sun>=22 case 1970: return ({({0 ,0 ,0 ,"" }), ({FIXED(151) ,UO+0 ,3600 ,"S" }), // May 31 ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1971: return ({({0 ,0 ,0 ,"" }), ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1972: return ({({0 ,0 ,0 ,"" }), ({LDAY (149,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1973: return ({({0 ,0 ,0 ,"" }), ({FIXED(154) ,UO+0 ,3600 ,"S" }), // Jun 3 ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(146) ,UO+0 ,3600 ,"S" }), // May 26 ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1975: return ({({0 ,0 ,0 ,"" }), ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(151) ,UO+0 ,3600 ,"S" }), // May 30 ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun case 1977: return ({({0 ,0 ,0 ,"" }), ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 case 1979: return ({({0 ,0 ,0 ,"" }), ({LDAY (148,7),UO+0 ,3600 ,"S" }), // May Sun>=22 ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 default: // ..1915 and 1980.. case 1921..1939: case 1949..1965: return ({({0 ,0 ,0 ,"" })}); } } } class Latvia { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1989..1996: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+7200 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+7200 ,0 ,"" })});// Sep lastSun default: // ..1988 and 1997.. return ({({0 ,0 ,0 ,"" })}); } } } class Lux { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1915: return ({({0 ,0 ,0 ,"" })});// ? case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(135) ,UO+82800 ,3600 ,"S" }), // May 14 ({FIXED(275) ,UO+0 ,0 ,"" })});// Oct 1 case 1917: return ({({0 ,0 ,0 ,"" }), ({FIXED(118) ,UO+82800 ,3600 ,"S" }), // Apr 28 ({FIXED(260) ,UO+0 ,0 ,"" })});// Sep 17 case 1918: return ({({0 ,0 ,0 ,"" }), ({LDAY (111,1),UO+7200 ,3600 ,"S" }), // Apr Mon>=15 ({LDAY (264,1),UO+7200 ,0 ,"" })});// Sep Mon>=15 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 ({FIXED(278) ,UO+7200 ,0 ,"" })});// Oct 5 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(45) ,UO+82800 ,3600 ,"S" }), // Feb 14 ({FIXED(298) ,UO+3600 ,0 ,"" })});// Oct 24 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(73) ,UO+82800 ,3600 ,"S" }), // Mar 14 ({FIXED(299) ,UO+3600 ,0 ,"" })});// Oct 26 case 1922: return ({({0 ,0 ,0 ,"" }), ({FIXED(84) ,UO+82800 ,3600 ,"S" }), // Mar 25 ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1923: return ({({0 ,0 ,0 ,"" }), ({FIXED(111) ,UO+82800 ,3600 ,"S" }), // Apr 21 ({LDAY (281,7),UO+3600 ,0 ,"" })});// Oct Sun>=2 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 29 ({LDAY (282,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1925: return ({({0 ,0 ,0 ,"" }), ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1926: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1928: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 ({LDAY (282,7),UO+0 ,0 ,"" })});// Oct Sun>=2 case 1929: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+82800 ,3600 ,"S" })});// Apr 20 case 1930..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Malta { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1973: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(90) ,UO+0 ,3600 ,"S" }), // Mar 31 ({FIXED(272) ,UO+0 ,0 ,"" })});// Sep 29 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(111) ,UO+0 ,3600 ,"S" }), // Apr 21 ({FIXED(259) ,UO+0 ,0 ,"" })});// Sep 16 case 1975..1979: return ({({0 ,0 ,0 ,"" }), ({LDAYL(111,7),UO+7200 ,3600 ,"S" }), // Apr Sun>=15 ({LDAYL(264,7),UO+3600 ,0 ,"" })});// Sep Sun>=15 case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+7200 ,3600 ,"S" }), // Mar 31 ({LDAY (265,7),UO+3600 ,0 ,"" })});// Sep Sun>=15 default: // ..1972 and 1981.. return ({({0 ,0 ,0 ,"" })}); } } } class Neth { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1915: return ({({0 ,0 ,0 ,"AMT" })});// ? case 1916: return ({({0 ,0 ,0 ,"AMT" }), // ? ({FIXED(122) ,UO+7200 ,3600 ,"NST" }), // May 1 ({FIXED(276) ,UO+7200 ,0 ,"AMT" })});// Oct 2 case 1917: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(106) ,UO+7200 ,3600 ,"NST" }), // Apr 16 ({FIXED(260) ,UO+7200 ,0 ,"AMT" })});// Sep 17 case 1918..1921: return ({({0 ,0 ,0 ,"AMT" }), ({LDAYL(97,1) ,UO+7200 ,3600 ,"NST" }), // Apr Mon>=1 ({LDAYL(273,1),UO+7200 ,0 ,"AMT" })});// Sep Mon>=24 case 1922: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(85) ,UO+7200 ,3600 ,"NST" }), // Mar 26 ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1923: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(152) ,UO+7200 ,3600 ,"NST" }), // Jun 1 ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1924: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(90) ,UO+7200 ,3600 ,"NST" }), // Mar 30 ({LDAY (282,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1925: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(156) ,UO+7200 ,3600 ,"NST" }), // Jun 5 ({LDAY (281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1932: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(143) ,UO+7200 ,3600 ,"NST" }), // May 22 ({LDAY (282,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1926..1931: case 1933..1936: return ({({0 ,0 ,0 ,"AMT" }), ({FIX_L(135) ,UO+7200 ,3600 ,"NST" }), // May 15 ({LDAYL(281,7),UO+7200 ,0 ,"AMT" })});// Oct Sun>=2 case 1937: return ({({0 ,0 ,0 ,"AMT" }), ({FIXED(142) ,UO+7200 ,3600 ,"NST" }), // May 22 ({FIXED(182) ,UO-3600 ,3600 ,"S" }), // Jul 1 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1938..1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(135) ,UO+7200 ,3600 ,"S" }), // May 15 ({LDAY (281,7),UO+7200 ,0 ,"" })});// Oct Sun>=2 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(140) ,UO+7200 ,0 ,"" })});// May 20 case 1940..1944: case 1946..: return ({({0 ,0 ,0 ,"" })}); } } } class Norway { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(143) ,UO+3600 ,3600 ,"S" }), // May 22 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Sep 30 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+7200 ,3600 ,"S" }), // Apr 2 ({FIXED(274) ,UO+7200 ,0 ,"" })});// Oct 1 case 1959..1964: return ({({0 ,0 ,0 ,"" }), ({LDAYL(80,7) ,UO+7200 ,3600 ,"S" }), // Mar Sun>=15 ({LDAYL(264,7),UO+7200 ,0 ,"" })});// Sep Sun>=15 case 1965: return ({({0 ,0 ,0 ,"" }), ({FIXED(115) ,UO+7200 ,3600 ,"S" }), // Apr 25 ({LDAY (264,7),UO+7200 ,0 ,"" })});// Sep Sun>=15 default: // ..1915 and 1966.. case 1917..1944: case 1946..1958: return ({({0 ,0 ,0 ,"" })}); } } } class Poland { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+7200 ,3600 ,"S" }), // Apr 15 ({FIXED(259) ,UO+7200 ,0 ,"" })});// Sep 16 case 1944: return ({({0 ,0 ,0 ,"" }), ({FIXED(278) ,UO+7200 ,0 ,"" })});// Oct 4 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(119) ,UO+0 ,3600 ,"S" }), // Apr 29 ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(104) ,UO+0 ,3600 ,"S" }), // Apr 14 ({FIXED(250) ,UO-3600 ,0 ,"" })});// Sep 7 case 1947: return ({({0 ,0 ,0 ,"" }), ({FIXED(124) ,UO+0 ,3600 ,"S" }), // May 4 ({LDAY (280,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 case 1948: return ({({0 ,0 ,0 ,"" }), ({FIXED(109) ,UO+0 ,3600 ,"S" }), // Apr 18 ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 case 1957: return ({({0 ,0 ,0 ,"" }), ({FIXED(153) ,UO+3600 ,3600 ,"S" }), // Jun 2 ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1958: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+3600 ,3600 ,"S" }), // Mar 30 ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1959: return ({({0 ,0 ,0 ,"" }), ({FIXED(151) ,UO+3600 ,3600 ,"S" }), // May 31 ({LDAY (280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 case 1960: return ({({0 ,0 ,0 ,"" }), ({FIXED(94) ,UO+3600 ,3600 ,"S" }), // Apr 3 ({LDAY (281,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 case 1961: return ({({0 ,0 ,0 ,"" }), ({LDAY (151,7),UO+3600 ,3600 ,"S" }), // May Sun>=25 ({LDAY (280,7),UO+3600 ,0 ,"" })});// Oct Sun>=1 case 1962..1964: return ({({0 ,0 ,0 ,"" }), ({LDAYL(151,7),UO+3600 ,3600 ,"S" }), // May Sun>=25 ({LDAYL(273,7),UO+3600 ,0 ,"" })});// Sep lastSun default: // ..1917 and 1965.. case 1920..1943: case 1949..1956: return ({({0 ,0 ,0 ,"" })}); } } } class Port { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(169) ,UO+82800 ,3600 ,"S" }), // Jun 17 ({FIXED(306) ,UO+0 ,0 ,"" })});// Nov 1 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Mar 1 ({FIXED(287) ,UO+82800 ,0 ,"" })});// Oct 14 case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(60) ,UO+82800 ,3600 ,"S" }), // Feb 29 ({FIXED(288) ,UO+82800 ,0 ,"" })});// Oct 14 case 1917: case 1919: case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(59) ,UO+82800 ,3600 ,"S" }), // Feb 28 ({FIXED(287) ,UO+82800 ,0 ,"" })});// Oct 14 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 16 ({FIXED(288) ,UO+82800 ,0 ,"" })});// Oct 14 case 1926: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1928: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1929: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1932: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 2 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1934: return ({({0 ,0 ,0 ,"" }), ({FIXED(97) ,UO+82800 ,3600 ,"S" }), // Apr 7 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1935: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+82800 ,3600 ,"S" }), // Mar 30 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1931: case 1936: return ({({0 ,0 ,0 ,"" }), ({FIX_L(108) ,UO+82800 ,3600 ,"S" }), // Apr 18 ({LDAYL(280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1937: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+82800 ,3600 ,"S" }), // Apr 3 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1938: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+82800 ,3600 ,"S" }), // Mar 26 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 ({FIXED(322) ,UO+82800 ,0 ,"" })});// Nov 18 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(55) ,UO+82800 ,3600 ,"S" }), // Feb 24 ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 5 case 1941: return ({({0 ,0 ,0 ,"" }), ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 ({FIXED(278) ,UO+82800 ,0 ,"" })});// Oct 5 case 1942: return ({({0 ,0 ,0 ,"" }), ({LDAY (73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 ({FIXED(115) ,UO+79200 ,7200 ,"M" }), // Apr 25 ({FIXED(227) ,UO+79200 ,3600 ,"S" }), // Aug 15 ({LDAY (303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 case 1943: return ({({0 ,0 ,0 ,"" }), ({LDAY (73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 ({FIXED(107) ,UO+79200 ,7200 ,"M" }), // Apr 17 ({LDAY (243,6),UO+79200 ,3600 ,"S" }), // Aug Sat>=25 ({LDAY (303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 case 1944..1945: return ({({0 ,0 ,0 ,"" }), ({LDAYL(73,6) ,UO+82800 ,3600 ,"S" }), // Mar Sat>=8 ({LDAYL(117,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=21 ({LDAYL(243,6),UO+79200 ,3600 ,"S" }), // Aug Sat>=25 ({LDAYL(303,6),UO+82800 ,0 ,"" })});// Oct Sat>=24 case 1946: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,6) ,UO+82800 ,3600 ,"S" }), // Apr Sat>=1 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1947..1949: case 1951..1965: return ({({0 ,0 ,0 ,"" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({LDAYL(280,7),UO+7200 ,0 ,"" })});// Oct Sun>=1 default: // ..1915: case 1922..1923: case 1925: case 1930: case 1933: case 1950: case 1966..1976: return ({({0 ,0 ,0 ,"" })}); case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(86) ,UO+0 ,3600 ,"S" }), // Mar 27 ({FIXED(268) ,UO+0 ,0 ,"" })});// Sep 25 case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 case 1979: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1980: return ({({0 ,0 ,0 ,"" }), ({LDAY (91,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAY (274,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1981..1982: return ({({0 ,0 ,0 ,"" }), ({LDAY (90,7) ,UO+3600 ,3600 ,"S" }), // Mar lastSun ({LDAY (273,7),UO+3600 ,0 ,"" })});// Sep lastSun case 1983: return ({({0 ,0 ,0 ,"" }), ({LDAY (90,7) ,UO+7200 ,3600 ,"S" })});// Mar lastSun case 1984..: return ({({0 ,0 ,3600 ,"S" })}); } } } class Romania { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1932: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(142) ,UO+0 ,3600 ,"S" }), // May 21 ({LDAY (281,7),UO+0 ,0 ,"" })});// Oct Sun>=1 case 1933..1939: return ({({0 ,0 ,0 ,"" }), ({LDAYL(98,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=2 ({LDAYL(280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 case 1979: return ({({0 ,0 ,0 ,"" }), ({FIXED(147) ,UO+0 ,3600 ,"S" }), // May 27 ({LDAY (273,7),UO-3600 ,0 ,"" })});// Sep lastSun case 1980: return ({({0 ,0 ,0 ,"" }), ({FIXED(96) ,UO+82800 ,3600 ,"S" }), // Apr 5 ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun case 1991..1993: return ({({0 ,0 ,0 ,"" }), ({LDAYL(90,7) ,UO+0 ,3600 ,"S" }), // Mar lastSun ({LDAYL(273,7),UO+0 ,0 ,"" })});// Sep lastSun default: // ..1931 and 1994.. case 1940..1978: case 1981..1990: return ({({0 ,0 ,0 ,"" })}); } } } class Spain { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1917: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(125) ,UO+82800 ,3600 ,"S" }), // May 5 ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 case 1918: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 case 1919: return ({({0 ,0 ,0 ,"" }), ({FIXED(95) ,UO+82800 ,3600 ,"S" }), // Apr 5 ({FIXED(279) ,UO+82800 ,0 ,"" })});// Oct 6 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 16 ({FIXED(278) ,UO+82800 ,0 ,"" })});// Oct 4 case 1926: return ({({0 ,0 ,0 ,"" }), ({FIXED(107) ,UO+82800 ,3600 ,"S" }), // Apr 17 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(99) ,UO+82800 ,3600 ,"S" }), // Apr 9 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1928: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 14 ({LDAY (281,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1929: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+82800 ,3600 ,"S" }), // Apr 20 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1937: return ({({0 ,0 ,0 ,"" }), ({FIXED(142) ,UO+82800 ,3600 ,"S" }), // May 22 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1938: return ({({0 ,0 ,0 ,"" }), ({FIXED(81) ,UO+82800 ,3600 ,"S" }), // Mar 22 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1939: return ({({0 ,0 ,0 ,"" }), ({FIXED(105) ,UO+82800 ,3600 ,"S" }), // Apr 15 ({LDAY (280,6),UO+82800 ,0 ,"" })});// Oct Sat>=1 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(76) ,UO+82800 ,3600 ,"S" })});// Mar 16 case 1941: return ({({0 ,0 ,3600 ,"S" })}); case 1942: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(122) ,UO+79200 ,7200 ,"M" }), // May 2 ({FIXED(244) ,UO+79200 ,3600 ,"S" })});// Sep 1 case 1943: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 ({FIXED(276) ,UO+79200 ,3600 ,"S" })});// Oct 3 case 1944: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (110,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 ({FIXED(284) ,UO+79200 ,3600 ,"S" })});// Oct 10 case 1945: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 ({FIXED(273) ,UO-3600 ,3600 ,"S" })});// Sep 30 case 1946: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (109,6),UO+79200 ,7200 ,"M" }), // Apr Sat>=13 ({FIXED(273) ,UO-7200 ,0 ,"" })});// Sep 30 case 1949: return ({({0 ,0 ,0 ,"" }), ({FIXED(120) ,UO+82800 ,3600 ,"S" }), // Apr 30 ({FIXED(273) ,UO+0 ,0 ,"" })});// Sep 30 case 1974..1975: return ({({0 ,0 ,0 ,"" }), ({LDAY (109,6),UO+82800 ,3600 ,"S" }), // Apr Sat>=13 ({LDAY (280,7),UO+0 ,0 ,"" })});// Oct Sun>=1 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(87) ,UO+82800 ,3600 ,"S" }), // Mar 27 ({LDAY (274,7),UO+0 ,0 ,"" })});// Sep lastSun case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+82800 ,3600 ,"S" }), // Apr 2 ({LDAY (273,7),UO+0 ,0 ,"" })});// Sep lastSun case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+82800 ,3600 ,"S" }), // Apr 2 ({FIXED(274) ,UO+0 ,0 ,"" })});// Oct 1 default: // ..1916 and 1979.. case 1920..1923: case 1925: case 1930..1936: case 1947..1948: case 1950..1973: return ({({0 ,0 ,0 ,"" })}); } } } class SpainAfrica { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1967: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(154) ,UO+43200 ,3600 ,"S" }), // Jun 3 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(175) ,UO+0 ,3600 ,"S" }), // Jun 24 ({FIXED(244) ,UO-3600 ,0 ,"" })});// Sep 1 case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(122) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(214) ,UO-3600 ,0 ,"" })});// Aug 1 case 1977: return ({({0 ,0 ,0 ,"" }), ({FIXED(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 case 1978: return ({({0 ,0 ,0 ,"" }), ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 ({FIXED(216) ,UO-3600 ,0 ,"" })});// Aug 4 default: // ..1966 and 1979.. case 1968..1973: case 1975: return ({({0 ,0 ,0 ,"" })}); } } } class Swiss { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1940: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(307) ,UO+0 ,3600 ,"S" }), // Nov 2 ({FIXED(366) ,UO-3600 ,0 ,"" })});// Dec 31 case 1941..1942: return ({({0 ,0 ,0 ,"" }), ({LDAY (127,7),UO+7200 ,3600 ,"S" }), // May Sun>=1 ({LDAY (280,7),UO-3600 ,0 ,"" })});// Oct Sun>=1 default: // ..1939 and 1943.. return ({({0 ,0 ,0 ,"" })}); } } } class Turkey { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"" }), ({FIXED(88) ,UO+0 ,3600 ,"S" }), // Mar 28 ({FIXED(299) ,UO-3600 ,0 ,"" })});// Oct 25 case 1921: return ({({0 ,0 ,0 ,"" }), ({FIXED(93) ,UO+0 ,3600 ,"S" }), // Apr 3 ({FIXED(276) ,UO-3600 ,0 ,"" })});// Oct 3 case 1922: return ({({0 ,0 ,0 ,"" }), ({FIXED(85) ,UO+0 ,3600 ,"S" }), // Mar 26 ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 case 1924: return ({({0 ,0 ,0 ,"" }), ({FIXED(134) ,UO+0 ,3600 ,"S" }), // May 13 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1916: case 1925: return ({({0 ,0 ,0 ,"" }), ({FIX_L(121) ,UO+0 ,3600 ,"S" }), // May 1 ({FIX_L(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1940: return ({({0 ,0 ,0 ,"" }), ({FIXED(182) ,UO+0 ,3600 ,"S" }), // Jun 30 ({FIXED(279) ,UO-3600 ,0 ,"" }), // Oct 5 ({FIXED(336) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1941: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(264) ,UO-3600 ,0 ,"" })});// Sep 21 case 1942: return ({({0 ,0 ,0 ,"" }), ({FIXED(91) ,UO+0 ,3600 ,"S" }), // Apr 1 ({FIXED(305) ,UO-3600 ,0 ,"" })});// Nov 1 case 1945: return ({({0 ,0 ,0 ,"" }), ({FIXED(92) ,UO+0 ,3600 ,"S" }), // Apr 2 ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 case 1946: return ({({0 ,0 ,0 ,"" }), ({FIXED(152) ,UO+0 ,3600 ,"S" }), // Jun 1 ({FIXED(274) ,UO-3600 ,0 ,"" })});// Oct 1 case 1947..1948: return ({({0 ,0 ,0 ,"" }), ({LDAYL(112,7),UO+0 ,3600 ,"S" }), // Apr Sun>=16 ({LDAYL(281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 case 1949: return ({({0 ,0 ,0 ,"" }), ({FIXED(100) ,UO+0 ,3600 ,"S" }), // Apr 10 ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 case 1950: return ({({0 ,0 ,0 ,"" }), ({FIXED(109) ,UO+0 ,3600 ,"S" }), // Apr 19 ({LDAY (281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 case 1951: return ({({0 ,0 ,0 ,"" }), ({FIXED(112) ,UO+0 ,3600 ,"S" }), // Apr 22 ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 case 1962: return ({({0 ,0 ,0 ,"" }), ({FIXED(196) ,UO+0 ,3600 ,"S" }), // Jul 15 ({FIXED(281) ,UO-3600 ,0 ,"" })});// Oct 8 case 1964: return ({({0 ,0 ,0 ,"" }), ({FIXED(136) ,UO+0 ,3600 ,"S" }), // May 15 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 1 case 1970..1972: return ({({0 ,0 ,0 ,"" }), ({LDAYL(128,7),UO+0 ,3600 ,"S" }), // May Sun>=2 ({LDAYL(281,7),UO-3600 ,0 ,"" })});// Oct Sun>=2 case 1973: return ({({0 ,0 ,0 ,"" }), ({FIXED(154) ,UO+3600 ,3600 ,"S" }), // Jun 3 ({FIXED(308) ,UO+7200 ,0 ,"" })});// Nov 4 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(90) ,UO+7200 ,3600 ,"S" }), // Mar 31 ({FIXED(307) ,UO+14400 ,0 ,"" })});// Nov 3 case 1975: return ({({0 ,0 ,0 ,"" }), ({FIXED(89) ,UO+0 ,3600 ,"S" }), // Mar 30 ({LDAY (304,7),UO-3600 ,0 ,"" })});// Oct lastSun case 1976: return ({({0 ,0 ,0 ,"" }), ({FIXED(153) ,UO+0 ,3600 ,"S" }), // Jun 1 ({LDAY (305,7),UO-3600 ,0 ,"" })});// Oct lastSun case 1977: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" }), // Apr Sun>=1 ({FIXED(289) ,UO-3600 ,0 ,"" })});// Oct 16 case 1978: return ({({0 ,0 ,0 ,"" }), ({LDAY (97,7) ,UO+0 ,3600 ,"S" })});// Apr Sun>=1 case 1979: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (97,7) ,UO+7200 ,3600 ,"S" }), // Apr Sun>=1 ({LDAY (290,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 case 1980: return ({({0 ,0 ,0 ,"" }), ({LDAY (98,7) ,UO+10800 ,3600 ,"S" }), // Apr Sun>=1 ({LDAY (291,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 case 1981..1982: return ({({0 ,0 ,0 ,"" }), ({LDAY (90,7) ,UO+10800 ,3600 ,"S" }), // Mar lastSun ({LDAY (290,1),UO-3600 ,0 ,"" })});// Oct Mon>=11 case 1983: return ({({0 ,0 ,0 ,"" }), ({FIXED(212) ,UO+0 ,3600 ,"S" }), // Jul 31 ({FIXED(275) ,UO-3600 ,0 ,"" })});// Oct 2 case 1985: return ({({0 ,0 ,0 ,"" }), ({FIXED(110) ,UO+0 ,3600 ,"S" }), // Apr 20 ({FIXED(271) ,UO-3600 ,0 ,"" })});// Sep 28 default: // ..1915 and 1986.. case 1917..1919: case 1923: case 1926..1939: case 1943..1944: case 1952..1961: case 1963: case 1965..1969: case 1984: return ({({0 ,0 ,0 ,"" })}); } } } class US { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918..1919: return ({({0 ,0 ,0 ,"S" }), ({LDAY (90,7) ,UO+7200 ,3600 ,"W" }), // Mar lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"W" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"W" })}); case 1945: return ({({0 ,0 ,3600 ,"W" }), ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 default: // ..1917: case 1920..1941: case 1946..1966: return ({({0 ,0 ,0 ,"S" })}); case 1974: return ({({0 ,0 ,0 ,"S" }), ({FIXED(6) ,UO+7200 ,3600 ,"D" }), // Jan 6 ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1975: return ({({0 ,0 ,0 ,"S" }), ({FIXED(54) ,UO+7200 ,3600 ,"D" }), // Feb 23 ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1967..1973: case 1976..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class NYC { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (91,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1921..1954: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1955..1966: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1919 and 1967.. return ({({0 ,0 ,0 ,"S" })}); } } } class Chicago { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(165) ,UO+7200 ,3600 ,"D" }), // Jun 13 ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1921: return ({({0 ,0 ,0 ,"S" }), ({LDAY (90,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1922..1954: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1955..1966: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1919 and 1967.. return ({({0 ,0 ,0 ,"S" })}); } } } class Denver { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1920: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (91,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun ({LDAY (305,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1921: return ({({0 ,0 ,0 ,"S" }), ({LDAY (90,7) ,UO+7200 ,3600 ,"D" }), // Mar lastSun ({FIXED(142) ,UO+3600 ,0 ,"S" })});// May 22 case 1965..1966: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1919 and 1967.. case 1922..1964: return ({({0 ,0 ,0 ,"S" })}); } } } class CA { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1948: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(74) ,UO+7200 ,3600 ,"D" })});// Mar 14 case 1949: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(1) ,UO+3600 ,0 ,"S" })});// Jan 1 case 1950..1961: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1962..1966: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1947 and 1967.. return ({({0 ,0 ,0 ,"S" })}); } } } class Indianapolis { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1941: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(173) ,UO+7200 ,3600 ,"D" }), // Jun 22 ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1942..1945: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(273,7),UO+7200 ,0 ,"S" })});// Sep lastSun case 1946..1954: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1940 and 1955.. return ({({0 ,0 ,0 ,"S" })}); } } } class Marengo { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1951: case 1954..1960: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1950 and 1961.. case 1952..1953: return ({({0 ,0 ,0 ,"S" })}); } } } class Starke { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1947..1954: case 1957..1958: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1955..1956: case 1959..1961: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1946 and 1962.. return ({({0 ,0 ,0 ,"S" })}); } } } class Louisville { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1921: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 ({FIXED(244) ,UO+3600 ,0 ,"S" })});// Sep 1 default: // ..1920: case 1922..1940: return ({({0 ,0 ,0 ,"S" })}); case 1946: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (120,7),UO+3600 ,3600 ,"D" }), // Apr lastSun ({FIXED(153) ,UO+3600 ,0 ,"S" })});// Jun 2 case 1943..1945: case 1948..1949: return ({({0 ,0 ,3600 ,"D" }), ({LDAYL(120,7),UO+3600 ,3600 ,"D" })});// Apr lastSun case 1950: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (120,7),UO+3600 ,3600 ,"D" }), // Apr lastSun ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1941: case 1951..1955: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1956..1960: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1942: case 1947: case 1961: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" })});// Apr lastSun case 1962..: return ({({0 ,0 ,3600 ,"D" })}); } } } class Detroit { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1948: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (121,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (274,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1967: return ({({0 ,0 ,0 ,"S" }), ({FIXED(165) ,UO+7200 ,3600 ,"D" }), // Jun 14 ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1947 and 1968.. case 1949..1966: return ({({0 ,0 ,0 ,"S" })}); } } } class Menominee { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1946: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1966: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1945 and 1967.. case 1947..1965: return ({({0 ,0 ,0 ,"S" })}); } } } class Canada { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 default: // ..1917: case 1919..1941: case 1946..1973: return ({({0 ,0 ,0 ,"S" })}); case 1974..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class StJohns { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1916: return ({({0 ,0 ,0 ,"S" })});// ? case 1917: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 ({FIXED(260) ,UO+3600 ,0 ,"S" })});// Sep 17 case 1918: return ({({0 ,0 ,0 ,"S" }), ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1919: return ({({0 ,0 ,0 ,"S" }), ({FIXED(125) ,UO+82800 ,3600 ,"D" }), // May 5 ({FIXED(224) ,UO+79200 ,0 ,"S" })});// Aug 12 case 1920..1935: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(127,7),UO+82800 ,3600 ,"D" }), // May Sun>=1 ({LDAYL(304,7),UO+79200 ,0 ,"S" })});// Oct lastSun case 1936..1941: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 ({LDAYL(280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(60) ,UO+0 ,3600 ,"D" }), // Mar 1 ({FIXED(365) ,UO-3600 ,0 ,"S" })});// Dec 31 case 1943: return ({({0 ,0 ,0 ,"S" }), ({FIXED(150) ,UO+0 ,3600 ,"D" }), // May 30 ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 case 1944: return ({({0 ,0 ,0 ,"S" }), ({FIXED(192) ,UO+0 ,3600 ,"D" }), // Jul 10 ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 2 case 1945: return ({({0 ,0 ,0 ,"S" }), ({FIXED(1) ,UO+0 ,3600 ,"D" }), // Jan 1 ({FIXED(280) ,UO+3600 ,0 ,"S" })});// Oct 7 case 1946..1950: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(134,7),UO+7200 ,3600 ,"D" }), // May Sun>=8 ({LDAYL(281,7),UO+3600 ,0 ,"S" })});// Oct Sun>=2 case 1951..1959: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1960..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1988: return ({({0 ,0 ,0 ,"S" }), ({LDAY (98,7) ,UO+7200 ,7200 ,"DD" }), // Apr Sun>=1 ({LDAY (305,7),UO+0 ,0 ,"S" })});// Oct lastSun case 1987: case 1989..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Halifax { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(92) ,UO+0 ,3600 ,"D" }), // Apr 1 ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1918: return ({({0 ,0 ,0 ,"S" }), ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1920: return ({({0 ,0 ,0 ,"S" }), ({FIXED(130) ,UO+0 ,3600 ,"D" }), // May 9 ({FIXED(242) ,UO-3600 ,0 ,"S" })});// Aug 29 case 1921: return ({({0 ,0 ,0 ,"S" }), ({FIXED(126) ,UO+0 ,3600 ,"D" }), // May 6 ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 case 1922: return ({({0 ,0 ,0 ,"S" }), ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 ({FIXED(248) ,UO-3600 ,0 ,"S" })});// Sep 5 case 1923: return ({({0 ,0 ,0 ,"S" }), ({LDAY (127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({FIXED(247) ,UO-3600 ,0 ,"S" })});// Sep 4 case 1924: return ({({0 ,0 ,0 ,"S" }), ({LDAY (128,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({FIXED(259) ,UO-3600 ,0 ,"S" })});// Sep 15 case 1925: return ({({0 ,0 ,0 ,"S" }), ({LDAY (127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({FIXED(271) ,UO-3600 ,0 ,"S" })});// Sep 28 case 1926: return ({({0 ,0 ,0 ,"S" }), ({FIXED(136) ,UO+0 ,3600 ,"D" }), // May 16 ({FIXED(256) ,UO-3600 ,0 ,"S" })});// Sep 13 case 1927: return ({({0 ,0 ,0 ,"S" }), ({FIXED(121) ,UO+0 ,3600 ,"D" }), // May 1 ({FIXED(269) ,UO-3600 ,0 ,"S" })});// Sep 26 case 1928: return ({({0 ,0 ,0 ,"S" }), ({LDAY (135,7),UO+0 ,3600 ,"D" }), // May Sun>=8 ({FIXED(253) ,UO-3600 ,0 ,"S" })});// Sep 9 case 1929: return ({({0 ,0 ,0 ,"S" }), ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 ({FIXED(246) ,UO-3600 ,0 ,"S" })});// Sep 3 case 1930: return ({({0 ,0 ,0 ,"S" }), ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 15 case 1931: return ({({0 ,0 ,0 ,"S" }), ({LDAY (134,7),UO+0 ,3600 ,"D" }), // May Sun>=8 ({LDAY (273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 case 1932: return ({({0 ,0 ,0 ,"S" }), ({LDAY (274,1),UO+0 ,0 ,"S" })});// Sep Mon>=24 case 1933: return ({({0 ,0 ,0 ,"S" }), ({FIXED(120) ,UO+0 ,3600 ,"D" }), // Apr 30 ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 2 case 1934: return ({({0 ,0 ,0 ,"S" }), ({FIXED(140) ,UO+0 ,3600 ,"D" }), // May 20 ({FIXED(259) ,UO-3600 ,0 ,"S" })});// Sep 16 case 1935: return ({({0 ,0 ,0 ,"S" }), ({FIXED(153) ,UO+0 ,3600 ,"D" }), // Jun 2 ({FIXED(273) ,UO-3600 ,0 ,"S" })});// Sep 30 case 1936: return ({({0 ,0 ,0 ,"S" }), ({FIXED(153) ,UO+0 ,3600 ,"D" }), // Jun 1 ({FIXED(258) ,UO-3600 ,0 ,"S" })});// Sep 14 case 1939: return ({({0 ,0 ,0 ,"S" }), ({FIXED(148) ,UO+0 ,3600 ,"D" }), // May 28 ({LDAY (273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 case 1937..1938: case 1940..1941: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({LDAYL(273,1),UO-3600 ,0 ,"S" })});// Sep Mon>=24 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1946..1959: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1915: case 1917: case 1919: case 1960..1961: return ({({0 ,0 ,0 ,"S" })}); case 1962..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Mont { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1917: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(84) ,UO+7200 ,3600 ,"D" }), // Mar 25 ({FIXED(114) ,UO-3600 ,0 ,"S" })});// Apr 24 case 1918: return ({({0 ,0 ,0 ,"S" }), ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1919: return ({({0 ,0 ,0 ,"S" }), ({FIXED(90) ,UO+9000 ,3600 ,"D" }), // Mar 31 ({FIXED(298) ,UO+5400 ,0 ,"S" })});// Oct 25 case 1920: return ({({0 ,0 ,0 ,"S" }), ({FIXED(123) ,UO+9000 ,3600 ,"D" }), // May 2 ({FIXED(277) ,UO+5400 ,0 ,"S" })});// Oct 3 case 1921: return ({({0 ,0 ,0 ,"S" }), ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 ({FIXED(275) ,UO+5400 ,0 ,"S" })});// Oct 2 case 1922: return ({({0 ,0 ,0 ,"S" }), ({FIXED(120) ,UO+7200 ,3600 ,"D" }), // Apr 30 ({FIXED(274) ,UO+5400 ,0 ,"S" })});// Oct 1 default: // ..1916: case 1923: return ({({0 ,0 ,0 ,"S" })}); case 1924: return ({({0 ,0 ,0 ,"S" }), ({FIXED(138) ,UO+7200 ,3600 ,"D" }), // May 17 ({LDAY (274,7),UO+5400 ,0 ,"S" })});// Sep lastSun case 1925..1926: return ({({0 ,0 ,0 ,"S" }), ({LDAY (127,7),UO+7200 ,3600 ,"D" }), // May Sun>=1 ({LDAY (273,7),UO+5400 ,0 ,"S" })});// Sep lastSun case 1928..1931: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(121,7),UO+0 ,3600 ,"D" }), // Apr Sun>=25 ({LDAYL(274,7),UO-3600 ,0 ,"S" })});// Sep Sun>=25 case 1927: case 1932: return ({({0 ,0 ,0 ,"S" }), ({FIX_L(121) ,UO+0 ,3600 ,"D" }), // May 1 ({LDAYL(274,7),UO-3600 ,0 ,"S" })});// Sep Sun>=25 case 1933: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+0 ,3600 ,"D" }), // Apr Sun>=24 ({FIXED(274) ,UO-3600 ,0 ,"S" })});// Oct 1 case 1934..1939: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr Sun>=24 ({LDAYL(273,7),UO-3600 ,0 ,"S" })});// Sep Sun>=24 case 1940: return ({({0 ,0 ,0 ,"S" }), ({LDAY (121,7),UO+0 ,3600 ,"D" })});// Apr Sun>=24 case 1941..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1946..1948: case 1951..1956: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1949..1950: case 1957..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Winn { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1916: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(114) ,UO+0 ,3600 ,"D" }), // Apr 23 ({FIXED(261) ,UO-3600 ,0 ,"S" })});// Sep 17 case 1918: return ({({0 ,0 ,0 ,"S" }), ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1937: return ({({0 ,0 ,0 ,"S" }), ({FIXED(136) ,UO+7200 ,3600 ,"D" }), // May 16 ({FIXED(269) ,UO+3600 ,0 ,"S" })});// Sep 26 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1946: return ({({0 ,0 ,0 ,"S" }), ({FIXED(132) ,UO+7200 ,3600 ,"D" }), // May 12 ({FIXED(286) ,UO+3600 ,0 ,"S" })});// Oct 13 case 1950: return ({({0 ,0 ,0 ,"S" }), ({FIXED(121) ,UO+7200 ,3600 ,"D" }), // May 1 ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 case 1947..1949: case 1951..1958: case 1960: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1963: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({FIXED(265) ,UO+3600 ,0 ,"S" })});// Sep 22 default: // ..1915: case 1917: case 1919..1936: case 1938..1941: case 1961..1962: case 1964..1965: return ({({0 ,0 ,0 ,"S" })}); case 1959: case 1966..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Regina { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1930..1934: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({LDAYL(280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 case 1938: return ({({0 ,0 ,0 ,"S" }), ({LDAY (104,7),UO+0 ,3600 ,"D" }), // Apr Sun>=8 ({LDAY (280,7),UO-3600 ,0 ,"S" })});// Oct Sun>=1 case 1937: case 1939..1941: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(104,7),UO+0 ,3600 ,"D" }), // Apr Sun>=8 ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1946: return ({({0 ,0 ,0 ,"S" }), ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 ({LDAY (287,7),UO+3600 ,0 ,"S" })});// Oct Sun>=8 case 1947..1958: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1959: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1917 and 1960.. case 1919..1929: case 1935..1936: return ({({0 ,0 ,0 ,"S" })}); } } } class Swift { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1957: case 1959: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1960..1961: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1956 and 1962.. case 1958: return ({({0 ,0 ,0 ,"S" })}); } } } class Edm { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 case 1919: return ({({0 ,0 ,0 ,"S" }), ({LDAY (104,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=8 ({FIXED(147) ,UO+3600 ,0 ,"S" })});// May 27 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1921..1923: case 1947: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAY (273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1917: case 1924..1941: case 1946: case 1948..1966: case 1968: case 1970..1971: return ({({0 ,0 ,0 ,"S" })}); case 1920: case 1967: case 1969: case 1972..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Vanc { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(304) ,UO+3600 ,0 ,"S" })});// Oct 31 default: // ..1917: case 1919..1941: return ({({0 ,0 ,0 ,"S" })}); case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 case 1946: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({FIXED(286) ,UO+3600 ,0 ,"S" })});// Oct 13 case 1947..1961: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun case 1962..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class NT_YK { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(104) ,UO+7200 ,3600 ,"D" }), // Apr 14 ({FIXED(300) ,UO+3600 ,0 ,"S" })});// Oct 27 case 1919: return ({({0 ,0 ,0 ,"S" }), ({FIXED(145) ,UO+7200 ,3600 ,"D" }), // May 25 ({FIXED(305) ,UO-3600 ,0 ,"S" })});// Nov 1 case 1942: return ({({0 ,0 ,0 ,"S" }), ({FIXED(40) ,UO+7200 ,3600 ,"D" })});// Feb 9 case 1943..1944: return ({({0 ,0 ,3600 ,"D" })}); case 1945: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 case 1965: return ({({0 ,0 ,0 ,"S" }), ({LDAY (120,7),UO+0 ,7200 ,"DD" }), // Apr lastSun ({LDAY (304,7),UO+0 ,0 ,"S" })});// Oct lastSun default: // ..1917: case 1920..1941: case 1946..1964: case 1966..1979: return ({({0 ,0 ,0 ,"S" })}); case 1980..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Mexico { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1939: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(36) ,UO+0 ,3600 ,"D" }), // Feb 5 ({FIXED(176) ,UO-3600 ,0 ,"S" })});// Jun 25 case 1940: return ({({0 ,0 ,0 ,"S" }), ({FIXED(344) ,UO+0 ,3600 ,"D" })});// Dec 9 case 1941: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(91) ,UO-3600 ,0 ,"S" })});// Apr 1 case 1943: return ({({0 ,0 ,0 ,"S" }), ({FIXED(350) ,UO+0 ,3600 ,"D" })});// Dec 16 case 1944: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(122) ,UO-3600 ,0 ,"S" })});// May 1 case 1950: return ({({0 ,0 ,0 ,"S" }), ({FIXED(43) ,UO+0 ,3600 ,"D" }), // Feb 12 ({FIXED(211) ,UO-3600 ,0 ,"S" })});// Jul 30 default: // ..1938: case 1942: case 1945..1949: case 1951..1995: return ({({0 ,0 ,0 ,"S" })}); case 1996..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class BajaN { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1954..1961: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(273,7),UO+3600 ,0 ,"S" })});// Sep lastSun default: // ..1953 and 1962.. return ({({0 ,0 ,0 ,"S" })}); } } } class Bahamas { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1963: return ({({0 ,0 ,0 ,"S" })});// ? case 1964..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+7200 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+7200 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun } } } class Barb { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1977: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(163) ,UO+7200 ,3600 ,"D" }), // Jun 12 ({LDAY (280,7),UO+3600 ,0 ,"S" })});// Oct Sun>=1 case 1978: return ({({0 ,0 ,0 ,"S" }), ({LDAY (111,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 ({LDAY (280,7),UO+3600 ,0 ,"S" })});// Oct Sun>=1 case 1979: return ({({0 ,0 ,0 ,"S" }), ({LDAY (111,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 ({FIXED(273) ,UO+3600 ,0 ,"S" })});// Sep 30 case 1980: return ({({0 ,0 ,0 ,"S" }), ({LDAY (112,7),UO+7200 ,3600 ,"D" }), // Apr Sun>=15 ({FIXED(269) ,UO+3600 ,0 ,"S" })});// Sep 25 default: // ..1976 and 1981.. return ({({0 ,0 ,0 ,"S" })}); } } } class Belize { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1918: return ({({0 ,0 ,0 ,"S" }), // ? ({LDAY (281,7),UO+0 ,1800 ,"HD" })});// Oct Sun>=2 case 1919..1942: return ({({0 ,0 ,1800 ,"HD" }), ({LDAYL(46,7) ,UO-1800 ,0 ,"S" }), // Feb Sun>=9 ({LDAYL(281,7),UO+0 ,1800 ,"HD" })});// Oct Sun>=2 case 1943: return ({({0 ,0 ,1800 ,"HD" }), ({LDAY (46,7) ,UO-1800 ,0 ,"S" })});// Feb Sun>=9 case 1973: return ({({0 ,0 ,0 ,"S" }), ({FIXED(339) ,UO+0 ,3600 ,"D" })});// Dec 5 case 1974: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(40) ,UO-3600 ,0 ,"S" })});// Feb 9 case 1982: return ({({0 ,0 ,0 ,"S" }), ({FIXED(352) ,UO+0 ,3600 ,"D" })});// Dec 18 case 1983: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(43) ,UO-3600 ,0 ,"S" })});// Feb 12 default: // ..1917 and 1984.. case 1944..1972: case 1975..1981: return ({({0 ,0 ,0 ,"S" })}); } } } class CR { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1979..1980: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(59,7) ,UO+0 ,3600 ,"D" }), // Feb lastSun ({LDAYL(158,7),UO-3600 ,0 ,"S" })});// Jun Sun>=1 case 1991: return ({({0 ,0 ,0 ,"S" }), ({LDAY (21,6) ,UO+0 ,3600 ,"D" }), // Jan Sat>=15 ({FIXED(182) ,UO-3600 ,0 ,"S" })});// Jul 1 case 1992: return ({({0 ,0 ,0 ,"S" }), ({LDAY (21,6) ,UO+0 ,3600 ,"D" }), // Jan Sat>=15 ({FIXED(75) ,UO-3600 ,0 ,"S" })});// Mar 15 default: // ..1978 and 1993.. case 1981..1990: return ({({0 ,0 ,0 ,"S" })}); } } } class Cuba { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1928: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(162) ,UO+0 ,3600 ,"D" }), // Jun 10 ({FIXED(284) ,UO-3600 ,0 ,"S" })});// Oct 10 case 1940..1942: case 1945..1946: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(158,7),UO+0 ,3600 ,"D" }), // Jun Sun>=1 ({LDAYL(250,7),UO-3600 ,0 ,"S" })});// Sep Sun>=1 default: // ..1927: case 1929..1939: case 1943..1944: case 1947..1964: return ({({0 ,0 ,0 ,"S" })}); case 1965: return ({({0 ,0 ,0 ,"S" }), ({FIXED(152) ,UO+0 ,3600 ,"D" }), // Jun 1 ({FIXED(273) ,UO-3600 ,0 ,"S" })});// Sep 30 case 1966: return ({({0 ,0 ,0 ,"S" }), ({FIXED(149) ,UO+0 ,3600 ,"D" }), // May 29 ({FIXED(275) ,UO-3600 ,0 ,"S" })});// Oct 2 case 1967: return ({({0 ,0 ,0 ,"S" }), ({FIXED(98) ,UO+0 ,3600 ,"D" }), // Apr 8 ({LDAY (257,7),UO-3600 ,0 ,"S" })});// Sep Sun>=8 case 1968: return ({({0 ,0 ,0 ,"S" }), ({FIXED(105) ,UO+0 ,3600 ,"D" }), // Apr 14 ({LDAY (258,7),UO-3600 ,0 ,"S" })});// Sep Sun>=8 case 1972..1974: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun ({FIX_L(281) ,UO-3600 ,0 ,"S" })});// Oct 8 case 1969..1971: case 1975..1977: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun case 1978: return ({({0 ,0 ,0 ,"S" }), ({FIXED(127) ,UO+0 ,3600 ,"D" }), // May 7 ({LDAY (287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1979..1980: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(80,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=15 ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1981..1985: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(131,7),UO+0 ,3600 ,"D" }), // May Sun>=5 ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1986..1989: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(79,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=14 ({LDAYL(287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1990: return ({({0 ,0 ,0 ,"S" }), ({LDAY (97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({LDAY (287,7),UO-3600 ,0 ,"S" })});// Oct Sun>=8 case 1991..1995: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(287,7),UO+0 ,0 ,"S" })});// Oct Sun>=8 case 1996: return ({({0 ,0 ,0 ,"S" }), ({LDAY (98,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({FIXED(280) ,UO+0 ,0 ,"S" })});// Oct 6 case 1997: return ({({0 ,0 ,0 ,"S" }), ({LDAY (97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({FIXED(285) ,UO+0 ,0 ,"S" })});// Oct 12 case 1998..1999: return ({({0 ,0 ,0 ,"S" }), ({LDAY (90,7) ,UO+0 ,3600 ,"D" }), // Mar lastSun ({LDAY (304,7),UO+0 ,0 ,"S" })});// Oct lastSun case 2000..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+0 ,0 ,"S" })});// Oct lastSun } } } class DR { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1966: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(303) ,UO+0 ,3600 ,"D" })});// Oct 30 case 1967: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(59) ,UO-3600 ,0 ,"S" })});// Feb 28 case 1969: return ({({0 ,0 ,0 ,"S" }), ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun case 1970: return ({({0 ,0 ,1800 ,"HD" }), ({FIXED(52) ,UO-1800 ,0 ,"S" }), // Feb 21 ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun case 1971: return ({({0 ,0 ,1800 ,"HD" }), ({FIXED(20) ,UO-1800 ,0 ,"S" }), // Jan 20 ({LDAY (304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun case 1972..1973: return ({({0 ,0 ,1800 ,"HD" }), ({FIXED(21) ,UO-1800 ,0 ,"S" }), // Jan 21 ({LDAYL(304,7),UO+0 ,1800 ,"HD" })});// Oct lastSun case 1974: return ({({0 ,0 ,1800 ,"HD" }), ({FIXED(21) ,UO-1800 ,0 ,"S" })});// Jan 21 default: // ..1965 and 1975.. case 1968: return ({({0 ,0 ,0 ,"S" })}); } } } class Salv { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1987..1988: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(127,7),UO+0 ,3600 ,"D" }), // May Sun>=1 ({LDAYL(273,7),UO-3600 ,0 ,"S" })});// Sep lastSun default: // ..1986 and 1989.. return ({({0 ,0 ,0 ,"S" })}); } } } class Guat { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1973: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(329) ,UO+0 ,3600 ,"D" })});// Nov 25 case 1974: return ({({0 ,0 ,3600 ,"D" }), ({FIXED(55) ,UO-3600 ,0 ,"S" })});// Feb 24 case 1983: return ({({0 ,0 ,0 ,"S" }), ({FIXED(141) ,UO+0 ,3600 ,"D" }), // May 21 ({FIXED(265) ,UO-3600 ,0 ,"S" })});// Sep 22 case 1991: return ({({0 ,0 ,0 ,"S" }), ({FIXED(82) ,UO+0 ,3600 ,"D" }), // Mar 23 ({FIXED(250) ,UO-3600 ,0 ,"S" })});// Sep 7 default: // ..1972 and 1992.. case 1975..1982: case 1984..1990: return ({({0 ,0 ,0 ,"S" })}); } } } class Haiti { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1983: return ({({0 ,0 ,0 ,"S" }), // ? ({FIXED(128) ,UO+0 ,3600 ,"D" }), // May 8 ({LDAY (304,7),UO-3600 ,0 ,"S" })});// Oct lastSun case 1984..1987: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun case 1988..1997: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+3600 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO+3600 ,0 ,"S" })});// Oct lastSun default: // ..1982 and 1998.. return ({({0 ,0 ,0 ,"S" })}); } } } class Nic { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1979..1980: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(81,7) ,UO+0 ,3600 ,"D" }), // Mar Sun>=16 ({LDAYL(180,1),UO-3600 ,0 ,"S" })});// Jun Mon>=23 case 1992: return ({({0 ,0 ,0 ,"S" }), ({FIXED(1) ,UO+14400 ,3600 ,"D" }), // Jan 1 ({FIXED(268) ,UO-3600 ,0 ,"S" })});// Sep 24 default: // ..1978 and 1993.. case 1981..1991: return ({({0 ,0 ,0 ,"S" })}); } } } class TC { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1978: return ({({0 ,0 ,0 ,"S" })});// ? case 1979..1986: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(120,7),UO+0 ,3600 ,"D" }), // Apr lastSun ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun case 1987..: return ({({0 ,0 ,0 ,"S" }), ({LDAYL(97,7) ,UO+0 ,3600 ,"D" }), // Apr Sun>=1 ({LDAYL(304,7),UO-3600 ,0 ,"S" })});// Oct lastSun } } } class Arg { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1930: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1931: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1932..1939: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIX_L(305) ,UO+0 ,3600 ,"S" })});// Nov 1 case 1940: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(61) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(183) ,UO+0 ,3600 ,"S" })});// Jul 1 case 1941: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(166) ,UO-3600 ,0 ,"" }), // Jun 15 ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1943: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(213) ,UO-3600 ,0 ,"" }), // Aug 1 ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1946: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1942: case 1944..1945: case 1947..1962: return ({({0 ,0 ,3600 ,"S" })}); case 1963: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(274) ,UO-3600 ,0 ,"" }), // Oct 1 ({FIXED(349) ,UO+0 ,3600 ,"S" })});// Dec 15 case 1964..1966: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIX_L(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1967: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 1974: return ({({0 ,0 ,0 ,"" }), ({FIXED(23) ,UO+0 ,3600 ,"S" }), // Jan 23 ({FIXED(121) ,UO-3600 ,0 ,"" }), // May 1 ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 1968: case 1975..1976: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(97,7) ,UO-3600 ,0 ,"" }), // Apr Sun>=1 ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 1969: case 1977: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (97,7) ,UO-3600 ,0 ,"" })});// Apr Sun>=1 case 1985: return ({({0 ,0 ,0 ,"" }), ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 2 case 1986: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(73) ,UO-3600 ,0 ,"" }), // Mar 14 ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 case 1987: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(44) ,UO-3600 ,0 ,"" }), // Feb 13 ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 case 1988: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(38) ,UO-3600 ,0 ,"" }), // Feb 7 ({FIXED(336) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1989..1992: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(66,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=1 ({LDAYL(294,7),UO+0 ,3600 ,"S" })});// Oct Sun>=15 case 1993: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (66,7) ,UO-3600 ,0 ,"" })});// Mar Sun>=1 default: // ..1929 and 1994.. case 1970..1973: case 1978..1984: return ({({0 ,0 ,0 ,"" })}); } } } class Brazil { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1931: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(276) ,UO+39600 ,3600 ,"S" })});// Oct 3 case 1932: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(92) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIXED(277) ,UO+0 ,3600 ,"S" })});// Oct 3 case 1933: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" })});// Apr 1 case 1949: return ({({0 ,0 ,0 ,"" }), ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1950: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(106) ,UO+0 ,0 ,"" }), // Apr 16 ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1951..1952: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIX_L(335) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1963: return ({({0 ,0 ,0 ,"" }), ({FIXED(343) ,UO+0 ,3600 ,"S" })});// Dec 9 case 1965: return ({({0 ,0 ,0 ,"" }), ({FIXED(31) ,UO+0 ,3600 ,"S" }), // Jan 31 ({FIXED(90) ,UO-3600 ,0 ,"" }), // Mar 31 ({FIXED(335) ,UO+0 ,3600 ,"S" })});// Dec 1 case 1966..1967: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(305) ,UO+0 ,3600 ,"S" })});// Nov 1 case 1953: case 1964: case 1968: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(60) ,UO-3600 ,0 ,"" })});// Mar 1 default: // ..1930: case 1934..1948: case 1954..1962: case 1969..1984: return ({({0 ,0 ,0 ,"" })}); case 1985: return ({({0 ,0 ,0 ,"" }), ({FIXED(306) ,UO+0 ,3600 ,"S" })});// Nov 2 case 1986: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(74) ,UO-3600 ,0 ,"" }), // Mar 15 ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 case 1987: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(45) ,UO-3600 ,0 ,"" }), // Feb 14 ({FIXED(298) ,UO+0 ,3600 ,"S" })});// Oct 25 case 1988: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(38) ,UO-3600 ,0 ,"" }), // Feb 7 ({FIXED(290) ,UO+0 ,3600 ,"S" })});// Oct 16 case 1989: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(29) ,UO-3600 ,0 ,"" }), // Jan 29 ({FIXED(288) ,UO+0 ,3600 ,"S" })});// Oct 15 case 1990: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(42) ,UO-3600 ,0 ,"" }), // Feb 11 ({FIXED(294) ,UO+0 ,3600 ,"S" })});// Oct 21 case 1991: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(48) ,UO-3600 ,0 ,"" }), // Feb 17 ({FIXED(293) ,UO+0 ,3600 ,"S" })});// Oct 20 case 1992: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(40) ,UO-3600 ,0 ,"" }), // Feb 9 ({FIXED(299) ,UO+0 ,3600 ,"S" })});// Oct 25 case 1993: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(31) ,UO-3600 ,0 ,"" }), // Jan 31 ({LDAY (290,7),UO+0 ,3600 ,"S" })});// Oct Sun>=11 case 1994..1995: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (52,7) ,UO-3600 ,0 ,"" }), // Feb Sun>=15 ({LDAY (290,7),UO+0 ,3600 ,"S" })});// Oct Sun>=11 case 1996: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(42) ,UO-3600 ,0 ,"" }), // Feb 11 ({FIXED(280) ,UO+0 ,3600 ,"S" })});// Oct 6 case 1997: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(47) ,UO-3600 ,0 ,"" }), // Feb 16 ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 6 case 1998: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(284) ,UO+0 ,3600 ,"S" })});// Oct 11 case 1999: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(52) ,UO-3600 ,0 ,"" }), // Feb 21 ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 2000..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 } } } class Chile { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1919: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(183) ,UO-3600 ,0 ,"" })});// Jul 2 case 1918: case 1927: return ({({0 ,0 ,0 ,"" }), ({FIXED(244) ,UO+0 ,3600 ,"S" })});// Sep 1 case 1928..1931: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIX_L(244) ,UO+0 ,3600 ,"S" })});// Sep 1 case 1932: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(92) ,UO-3600 ,0 ,"" })});// Apr 1 default: // ..1917: case 1920..1926: case 1933..1968: return ({({0 ,0 ,0 ,"" })}); case 1969: return ({({0 ,0 ,0 ,"" }), ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 case 1998: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 ({FIXED(270) ,UO+0 ,3600 ,"S" })});// Sep 27 case 1999: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(94) ,UO-3600 ,0 ,"" }), // Apr 4 ({LDAY (288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 case 1970..1997: case 2000..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(74,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=9 ({LDAYL(288,7),UO+0 ,3600 ,"S" })});// Oct Sun>=9 } } } class CO { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1992: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(123) ,UO+0 ,3600 ,"S" }), // May 2 ({FIXED(366) ,UO-3600 ,0 ,"" })});// Dec 31 default: // ..1991 and 1993.. return ({({0 ,0 ,0 ,"" })}); } } } class Falk { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { case 1939: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (84,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=19 ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1938: case 1940..1942: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(84,7) ,UO-3600 ,0 ,"" }), // Mar Sun>=19 ({LDAYL(273,7),UO+0 ,3600 ,"S" })});// Sep lastSun case 1943: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(1) ,UO-3600 ,0 ,"" })});// Jan 1 default: // ..1936: case 1944..1982: return ({({0 ,0 ,0 ,"" })}); case 1937: case 1983: return ({({0 ,0 ,0 ,"" }), ({LDAY (273,7),UO+0 ,3600 ,"S" })});// Sep lastSun case 1984: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (121,7),UO-3600 ,0 ,"" }), // Apr lastSun ({FIXED(260) ,UO+0 ,3600 ,"S" })});// Sep 16 case 1985: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (120,7),UO-3600 ,0 ,"" }), // Apr lastSun ({LDAY (258,7),UO+0 ,3600 ,"S" })});// Sep Sun>=9 case 1986..1995: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(112,7),UO-3600 ,0 ,"" }), // Apr Sun>=16 ({LDAYL(258,7),UO+0 ,3600 ,"S" })});// Sep Sun>=9 case 1996..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(112,7),UO-3600 ,0 ,"" }), // Apr Sun>=16 ({LDAYL(257,7),UO+0 ,3600 ,"S" })});// Sep Sun>=8 } } } class Para { inherit TZRules; static array(array(string|int)) jd_year_periods(int jd) { [int y,int yjd,int leap]=gregorian_yjd(jd); switch (y) { default: // ..1974: return ({({0 ,0 ,0 ,"" })});// ? case 1975: return ({({0 ,0 ,0 ,"" }), // ? ({FIXED(60) ,UO+0 ,0 ,"" }), // Mar 1 ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1976..1978: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIX_L(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1989: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIXED(295) ,UO+0 ,3600 ,"S" })});// Oct 22 case 1979..1988: case 1990: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIX_L(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1991: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(91) ,UO-3600 ,0 ,"" }), // Apr 1 ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 6 case 1992: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(61) ,UO-3600 ,0 ,"" }), // Mar 1 ({FIXED(279) ,UO+0 ,3600 ,"S" })});// Oct 5 case 1993: return ({({0 ,0 ,3600 ,"S" }), ({FIXED(90) ,UO-3600 ,0 ,"" }), // Mar 31 ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1994..1995: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun ({FIXED(274) ,UO+0 ,3600 ,"S" })});// Oct 1 case 1997: return ({({0 ,0 ,3600 ,"S" }), ({LDAY (59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun ({LDAY (280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 1996: case 1998: return ({({0 ,0 ,3600 ,"S" }), ({FIX_L(60) ,UO-3600 ,0 ,"" }), // Mar 1 ({LDAYL(280,7),UO+0 ,3600 ,"S" })});// Oct Sun>=1 case 1999..: return ({({0 ,0 ,3600 ,"S" }), ({LDAYL(59,7) ,UO-3600 ,0 ,"" }), // Feb lastSun ({LDAYL(287,7),UO+0 ,3600 ,"S" })});// Oct Sun>=8 } } } class Peru { inherit TZRules; static array(array(