File Coverage

blib/lib/Date/Calendar/Profiles.pm
Criterion Covered Total %
statement 196 219 89.5
branch 27 44 61.3
condition 7 21 33.3
subroutine 72 76 94.7
pod 0 71 0.0
total 302 431 70.0


line stmt bran cond sub pod time code
1              
2             ###############################################################################
3             ## ##
4             ## Copyright (c) 2000 - 2015 by Steffen Beyer. ##
5             ## All rights reserved. ##
6             ## ##
7             ## This package is free software; you can redistribute it ##
8             ## and/or modify it under the same terms as Perl itself. ##
9             ## ##
10             ###############################################################################
11              
12             package Date::Calendar::Profiles;
13              
14 4     4   5928 BEGIN { eval { require bytes; }; }
  4         134  
15 4     4   15 use strict;
  4         5  
  4         135  
16 4     4   14 use vars qw( @ISA @EXPORT @EXPORT_OK $VERSION $Profiles );
  4         5  
  4         412  
17              
18             require Exporter;
19              
20             @ISA = qw(Exporter);
21              
22             @EXPORT = qw();
23              
24             @EXPORT_OK = qw(
25             $Profiles
26             &Previous_Friday
27             &Next_Monday
28             &Next_Monday_or_Tuesday
29             &Nearest_Workday
30             &Sunday_to_Monday
31             &Advent1
32             &Advent2
33             &Advent3
34             &Advent4
35             &Advent
36             );
37              
38             $VERSION = '6.4';
39              
40 4     4   504 use Date::Calc qw(:all);
  4         5  
  4         1775  
41 4     4   68 use Carp::Clan qw(^Date::);
  4         5  
  4         47  
42              
43             ##########################################################################
44             # #
45             # Moving ("variable") holidays depending on the date of Easter Sunday: #
46             # #
47             # Weiberfastnacht, Fettdonnerstag = -52 days #
48             # Carnival Monday / Rosenmontag / Veille du Mardi Gras = -48 days #
49             # Mardi Gras / Karnevalsdienstag / Mardi Gras = -47 days #
50             # Ash Wednesday / Aschermittwoch / Mercredi des Cendres = -46 days #
51             # Palm Sunday / Palmsonntag / Dimanche des Rameaux = -7 days #
52             # Maundy Thursday / Gruendonnerstag / Jeudi avant Paques = -3 days #
53             # Good Friday / Karfreitag / Vendredi Saint = -2 days #
54             # Easter Saturday / Ostersamstag / Samedi de Paques = -1 day #
55             # Easter Sunday / Ostersonntag / Dimanche de Paques = +0 days #
56             # Easter Monday / Ostermontag / Lundi de Paques = +1 day #
57             # Prayer Day / Bettag / Jour de la Priere (Denmark) = +26 days #
58             # Ascension of Christ / Christi Himmelfahrt / Ascension = +39 days #
59             # Whitsunday / Pfingstsonntag / Dimanche de Pentecote = +49 days #
60             # Whitmonday / Pfingstmontag / Lundi de Pentecote = +50 days #
61             # Feast of Corpus Christi / Fronleichnam / Fete-Dieu = +60 days #
62             # #
63             ##########################################################################
64              
65             ###############################################
66             # #
67             # Rules to enhance readability: #
68             # #
69             # 1) First level constants in single quotes, #
70             # second level constants in double quotes. #
71             # 2) Use leading zeros for fixed length. #
72             # #
73             ###############################################
74              
75             #####################
76             # Global variables: #
77             #####################
78              
79             $Profiles = { };
80              
81             ###############################
82             # Global utility subroutines: #
83             ###############################
84              
85             sub Previous_Friday
86             {
87 4     4 0 6 my($yy) = shift;
88 4         5 my($mm) = shift;
89 4         5 my($dd) = shift;
90 4         4 my($dow);
91              
92             # If holiday falls on Saturday or Sunday, use previous Friday instead:
93              
94 4         9 $dow = Day_of_Week($yy,$mm,$dd);
95 4 50       13 if ($dow == 6) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,-1); }
  0 50       0  
96 0         0 elsif ($dow == 7) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,-2); }
97 4         16 return($yy,$mm,$dd,@_);
98             }
99              
100             sub Next_Monday
101             {
102 154     154 0 156 my($yy) = shift;
103 154         167 my($mm) = shift;
104 154         140 my($dd) = shift;
105 154         128 my($dow);
106              
107             # If holiday falls on Saturday, use following Monday instead;
108             # if holiday falls on Sunday, use day thereafter (Monday) instead:
109              
110 154         289 $dow = Day_of_Week($yy,$mm,$dd);
111 154 100       363 if ($dow == 6) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+2); }
  67 100       162  
112 7         19 elsif ($dow == 7) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+1); }
113 154         586 return($yy,$mm,$dd,@_);
114             }
115              
116             sub Next_Monday_or_Tuesday # For second holiday of two adjacent ones!
117             {
118 11     11 0 17 my($yy) = shift;
119 11         21 my($mm) = shift;
120 11         7 my($dd) = shift;
121 11         12 my($dow);
122              
123             # If holiday falls on Saturday, use following Monday instead;
124             # if holiday falls on Sunday or Monday, use next Tuesday instead
125             # (because Monday is already taken by adjacent holiday on the day before):
126              
127 11         23 $dow = Day_of_Week($yy,$mm,$dd);
128 11 100 66     62 if ($dow == 6 or $dow == 7) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+2); }
  1 50       4  
129 0         0 elsif ($dow == 1) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+1); }
130 11         49 return($yy,$mm,$dd,@_);
131             }
132              
133             sub Nearest_Workday
134             {
135 122     122 0 144 my($yy) = shift;
136 122         121 my($mm) = shift;
137 122         110 my($dd) = shift;
138 122         111 my($dow);
139              
140             # If holiday falls on Saturday, use day before (Friday) instead;
141             # if holiday falls on Sunday, use day thereafter (Monday) instead:
142              
143 122         222 $dow = Day_of_Week($yy,$mm,$dd);
144 122 100       284 if ($dow == 6) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,-1); }
  61 50       159  
145 0         0 elsif ($dow == 7) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+1); }
146 122         499 return($yy,$mm,$dd,@_);
147             }
148              
149             sub Sunday_to_Monday
150             {
151 103     103 0 106 my($yy) = shift;
152 103         84 my($mm) = shift;
153 103         87 my($dd) = shift;
154 103         80 my($dow);
155              
156             # If holiday falls on Sunday, use day thereafter (Monday) instead:
157              
158 103         185 $dow = Day_of_Week($yy,$mm,$dd);
159 103 100       172 if ($dow == 7) { ($yy,$mm,$dd) = Add_Delta_Days($yy,$mm,$dd,+1); }
  10         27  
160 103         351 return($yy,$mm,$dd,@_);
161             }
162              
163             ######################################
164             # Global utility callback functions: #
165             ######################################
166              
167             sub Advent1
168             {
169 2     2 0 3 my($year,$label) = @_;
170 2         8 return( Add_Delta_Days($year,12,25,
171             -(Day_of_Week($year,12,25)+21)), '#' );
172             }
173             sub Advent2
174             {
175 0     0 0 0 my($year,$label) = @_;
176 0         0 return( Add_Delta_Days($year,12,25,
177             -(Day_of_Week($year,12,25)+14)), '#' );
178             }
179             sub Advent3
180             {
181 0     0 0 0 my($year,$label) = @_;
182 0         0 return( Add_Delta_Days($year,12,25,
183             -(Day_of_Week($year,12,25)+7)), '#' );
184             }
185             sub Advent4
186             {
187 0     0 0 0 my($year,$label) = @_;
188 0         0 return( Add_Delta_Days($year,12,25,
189             -Day_of_Week($year,12,25)), '#' );
190             }
191              
192             sub Advent
193             {
194 148     148 0 213 my($year,$label) = @_;
195 148         150 my($offset);
196              
197 148         338 $offset = (4 - substr($label,0,1)) * 7;
198 148         359 return( Add_Delta_Days($year,12,25,
199             -(Day_of_Week($year,12,25)+$offset)), '#' );
200             }
201              
202             ###################
203             # Local profiles: #
204             ###################
205              
206             $Profiles->{'DE'} = # Deutschland
207             {
208             # For labeling only (defaults, may be overridden):
209             "Dreikönigstag" => "#06.01.",
210             "Valentinstag" => "#14.02.",
211             "Weltfrauentag" => "#08.03.",
212             "Josephstag" => "#19.03.",
213             "Frühlingsanfang" => "#20.03.",
214             "Sommeranfang" => "#21.06.",
215             "Herbstanfang" => "#23.09.",
216             "Winteranfang" => "#21.12.",
217             "Beginn d. Sommerzeit" => "#5/Sun/Mar",
218             "Fettdonnerstag" => "#-52",
219             "Weiberfastnacht" => "#-52",
220             "Rosenmontag" => "#-48",
221             "Karnevalsdienstag" => "#-47",
222             "Aschermittwoch" => "#-46",
223             "Palmsonntag" => "#-7",
224             "Gründonnerstag" => "#-3",
225             "Karfreitag" => "#-2",
226             "Karsamstag" => "#-1",
227             "Muttertag" => "#2/Sun/May",
228             "Vatertag" => "#2/Sun/Aug",
229             "Peter und Paul" => "#29.06.",
230             "Fronleichnam" => "#+60",
231             "Mariä Himmelfahrt" => "#15.08.",
232             "Erntedankfest" => "#1/Sun/Oct",
233             "Ende d. Sommerzeit" => "#5/Sun/Oct",
234             "Reformationstag" => "#31.10.",
235             "Allerheiligen" => "#01.11.",
236             "Allerseelen" => "#02.11.",
237             "Martinstag" => "#11.11.",
238             "Mariä Empfängnis" => "#08.12.",
239             "Buß- und Bettag" => \&DE_Buss_und_Bettag2,
240             "Volkstrauertag" => \&DE_Volkstrauertag,
241             "Totensonntag" => \&DE_Totensonntag,
242             "1. Advent" => \&Advent,
243             "2. Advent" => \&Advent,
244             "3. Advent" => \&Advent,
245             "4. Advent" => \&Advent,
246             "Nikolaus" => "#06.12.",
247             "Heiligabend" => "#24.12.",
248             "Sylvester" => "#31.12.",
249             # Common legal holidays (in all federal states):
250             "Neujahr" => "01.01.",
251             "Karfreitag" => "-2",
252             "Ostersonntag" => "+0",
253             "Ostermontag" => "+1",
254             "Tag der Arbeit" => "01.05.",
255             "Christi Himmelfahrt" => "+39",
256             "Pfingstsonntag" => "+49",
257             "Pfingstmontag" => "+50",
258             "Tag der deutschen Einheit" => "03.10.",
259             "1. Weihnachtsfeiertag" => "25.12.",
260             "2. Weihnachtsfeiertag" => "26.12."
261             };
262              
263             $Profiles->{'DE-BW'} = # Baden-Württemberg
264             {
265             %{$Profiles->{'DE'}},
266             "Dreikönigstag" => "06.01.",
267             "Fronleichnam" => "+60",
268             "Allerheiligen" => "01.11."
269             };
270             $Profiles->{'DE-BY'} = # Bayern
271             {
272             %{$Profiles->{'DE'}},
273             "Dreikönigstag" => "06.01.",
274             "Fronleichnam" => "+60",
275             "Mariä Himmelfahrt" => "15.08.",
276             "Allerheiligen" => "01.11."
277             };
278             $Profiles->{'DE-BE'} = # Berlin
279             {
280             %{$Profiles->{'DE'}}
281             };
282             $Profiles->{'DE-BB'} = # Brandenburg
283             {
284             %{$Profiles->{'DE'}},
285             "Reformationstag" => "31.10."
286             };
287             $Profiles->{'DE-HB'} = # Bremen
288             {
289             %{$Profiles->{'DE'}}
290             };
291             $Profiles->{'DE-HH'} = # Hamburg
292             {
293             %{$Profiles->{'DE'}}
294             };
295             $Profiles->{'DE-HE'} = # Hessen
296             {
297             %{$Profiles->{'DE'}},
298             "Fronleichnam" => "+60"
299             };
300             $Profiles->{'DE-MV'} = # Mecklenburg-Vorpommern
301             {
302             %{$Profiles->{'DE'}},
303             "Reformationstag" => "31.10."
304             };
305             $Profiles->{'DE-NI'} = # Niedersachsen
306             {
307             %{$Profiles->{'DE'}}
308             };
309             $Profiles->{'DE-NW'} = # Nordrhein-Westfalen
310             {
311             %{$Profiles->{'DE'}},
312             "Fronleichnam" => "+60",
313             "Allerheiligen" => "01.11."
314             };
315             $Profiles->{'DE-RP'} = # Rheinland-Pfalz
316             {
317             %{$Profiles->{'DE'}},
318             "Fronleichnam" => "+60",
319             "Allerheiligen" => "01.11."
320             };
321             $Profiles->{'DE-SL'} = # Saarland
322             {
323             %{$Profiles->{'DE'}},
324             "Fronleichnam" => "+60",
325             "Mariä Himmelfahrt" => "15.08.",
326             "Allerheiligen" => "01.11."
327             };
328             $Profiles->{'DE-SN'} = # Sachsen
329             {
330             %{$Profiles->{'DE'}},
331             "Reformationstag" => "31.10.",
332             "Buß- und Bettag" => \&DE_Buss_und_Bettag
333             };
334             $Profiles->{'DE-ST'} = # Sachsen-Anhalt
335             {
336             %{$Profiles->{'DE'}},
337             "Dreikönigstag" => "06.01.",
338             "Reformationstag" => "31.10."
339             };
340             $Profiles->{'DE-SH'} = # Schleswig-Holstein
341             {
342             %{$Profiles->{'DE'}}
343             };
344             $Profiles->{'DE-TH'} = # Thüringen
345             {
346             %{$Profiles->{'DE'}},
347             "Reformationstag" => "31.10."
348             };
349              
350             # Alternative:
351             # Buss- und Bettag = 1. Advent - 11 Tage
352             # 1. Advent = 4. Advent - 21 Tage (3 Wochen)
353             # 4. Advent = letzter Sonntag vor dem 25.12.
354             # (Beide Alternativen sind auf dem Definitionsbereich
355             # [1583..2299] aequivalent!)
356             #sub DE_Buss_und_Bettag
357             #{
358             # my($year,$label) = @_;
359             # return( Add_Delta_Days($year,12,25,
360             # -(Day_of_Week($year,12,25)+32)) );
361             #}
362              
363             sub DE_Buss_und_Bettag # Dritter Werktags-Mittwoch im November
364             {
365 36     36 0 68 my($year,$label) = @_;
366 36 100       113 if (Day_of_Week($year,11,1) == 3)
367 29         86 { return( Nth_Weekday_of_Month_Year($year,11,3,4) ); }
368             else
369 7         23 { return( Nth_Weekday_of_Month_Year($year,11,3,3) ); }
370             }
371             sub DE_Buss_und_Bettag2
372             {
373 35     35 0 123 return( &DE_Buss_und_Bettag(@_), '#' );
374             }
375             sub DE_Volkstrauertag
376             {
377 36     36 0 65 my($year,$label) = @_;
378 36         124 return( Add_Delta_Days($year,12,25,
379             -(Day_of_Week($year,12,25)+35)), '#' );
380             }
381             sub DE_Totensonntag
382             {
383 36     36 0 52 my($year,$label) = @_;
384 36         114 return( Add_Delta_Days($year,12,25,
385             -(Day_of_Week($year,12,25)+28)), '#' );
386             }
387              
388             # Thanks to:
389             # David Cassell
390             # Larry Rosler
391             # Anthony Argyriou
392             # Philip Newton
393             # Joe Rice
394             # Sridhar Gopal
395              
396             $Profiles->{'US'} = # United States of America
397             {
398             # For labeling only (defaults, may be overridden):
399             "Valentine's Day" => "#Feb/14",
400             "Maundy Thursday" => "#-3",
401             "Good Friday" => "#-2",
402             "Election Day" => \&US_Election,
403             # Common legal holidays (in all federal states):
404             "New Year's Day" => \&US_New_Year,
405             "Martin Luther King's Birthday" => "3/Mon/Jan",
406             "Civil Rights Day" => "#3/Mon/Jan", # Thanks to Michael G. Schwern
407             "Human Rights Day" => "#3/Mon/Jan", # and http://en.wikipedia.org/wiki/Martin_Luther_King_Day
408             "President's Day" => "3/Mon/Feb",
409             "Washington's Birthday" => "#3/Mon/Feb", # Thanks to Michael G. Schwern
410             "Memorial Day" => "5/Mon/May",
411             "Independence Day" => \&US_Independence,
412             "Labor Day" => "1/Mon/Sep",
413             "Columbus Day" => "2/Mon/Oct",
414             "Halloween" => "#Oct/31",
415             "All Saints Day" => "#Nov/1",
416             "All Souls Day" => "#Nov/2",
417             "Veterans' Day" => \&US_Veteran,
418             "Thanksgiving Day" => "4/Thu/Nov",
419             "Christmas Day" => \&US_Christmas,
420             # Federal observances (thanks to http://en.wikipedia.org/wiki/US_holidays):
421             "Inauguration Day" => "#Jan/20",
422             "Super Bowl Sunday" => "#1/Sun/Feb",
423             "Groundhog Day" => "#Feb/2",
424             "St. Patrick's Day" => "#Mar/17",
425             "Earth Day" => "#Apr/22",
426             "Cinco de Mayo" => "#May/5",
427             "Mother's Day" => "#2/Sun/May",
428             "Father's Day" => "#3/Sun/Jun",
429             "Pearl Harbor Remembrance Day" => "#Dec/7",
430             "Winter Solstice" => "#Dec/21",
431             "Christmas Eve" => "#Dec/24",
432             "New Year's Eve" => "#Dec/31"
433             };
434              
435             sub US_New_Year # First of January
436             {
437 61     61 0 91 my($year,$label) = @_;
438 61         136 return( &Next_Monday($year,1,1) );
439             }
440             sub US_Independence # Fourth of July
441             {
442 61     61 0 83 my($year,$label) = @_;
443 61         130 return( &Nearest_Workday($year,7,4) );
444             }
445             sub US_Labor # First Monday after the first Sunday in September
446             {
447 0     0 0 0 my($year,$label) = @_;
448 0         0 return( Add_Delta_Days(
449             Nth_Weekday_of_Month_Year($year,9,7,1), +1) );
450             }
451             sub US_Election # First Tuesday after the first Monday in November
452             {
453 61     61 0 97 my($year,$label) = @_;
454 61         164 return( Add_Delta_Days(
455             Nth_Weekday_of_Month_Year($year,11,1,1), +1), '#' );
456             }
457             sub US_Veteran # 11th of November
458             {
459 61     61 0 84 my($year,$label) = @_;
460 61         155 return( &Nearest_Workday($year,11,11) );
461             }
462             sub US_Christmas # 25th of December
463             {
464 61     61 0 94 my($year,$label) = @_;
465 61         134 return( &Next_Monday($year,12,25) );
466             }
467              
468             $Profiles->{'US-AK'} = # Alaska
469             {
470             %{$Profiles->{'US'}}
471             };
472             $Profiles->{'US-AL'} = # Alabama
473             {
474             %{$Profiles->{'US'}}
475             };
476             $Profiles->{'US-AR'} = # Arkansas
477             {
478             %{$Profiles->{'US'}}
479             };
480             $Profiles->{'US-AS'} = # American Samoa
481             {
482             %{$Profiles->{'US'}}
483             };
484             $Profiles->{'US-AZ'} = # Arizona
485             {
486             %{$Profiles->{'US'}}
487             };
488             $Profiles->{'US-CA'} = # California
489             {
490             %{$Profiles->{'US'}}
491             };
492             $Profiles->{'US-CO'} = # Colorado
493             {
494             %{$Profiles->{'US'}}
495             };
496             $Profiles->{'US-CT'} = # Connecticut
497             {
498             %{$Profiles->{'US'}}
499             };
500             $Profiles->{'US-DC'} = # District of Columbia
501             {
502             %{$Profiles->{'US'}}
503             };
504             $Profiles->{'US-DE'} = # Delaware
505             {
506             %{$Profiles->{'US'}}
507             };
508             $Profiles->{'US-FL'} = # Florida
509             {
510             %{$Profiles->{'US'}}
511             };
512             $Profiles->{'US-FM'} = # Federated States of Micronesia
513             {
514             %{$Profiles->{'US'}}
515             };
516             $Profiles->{'US-GA'} = # Georgia
517             {
518             %{$Profiles->{'US'}}
519             };
520             $Profiles->{'US-GU'} = # Guam
521             {
522             %{$Profiles->{'US'}}
523             };
524             $Profiles->{'US-HI'} = # Hawaii
525             {
526             %{$Profiles->{'US'}}
527             };
528             $Profiles->{'US-IA'} = # Iowa
529             {
530             %{$Profiles->{'US'}}
531             };
532             $Profiles->{'US-ID'} = # Idaho
533             {
534             %{$Profiles->{'US'}}
535             };
536             $Profiles->{'US-IL'} = # Illinois
537             {
538             %{$Profiles->{'US'}}
539             };
540             $Profiles->{'US-IN'} = # Indiana
541             {
542             %{$Profiles->{'US'}}
543             };
544             $Profiles->{'US-KS'} = # Kansas
545             {
546             %{$Profiles->{'US'}}
547             };
548             $Profiles->{'US-KY'} = # Kentucky
549             {
550             %{$Profiles->{'US'}}
551             };
552             $Profiles->{'US-LA'} = # Louisiana
553             {
554             %{$Profiles->{'US'}}
555             };
556             $Profiles->{'US-MA'} = # Massachusetts
557             {
558             %{$Profiles->{'US'}}
559             };
560             $Profiles->{'US-MD'} = # Maryland
561             {
562             %{$Profiles->{'US'}}
563             };
564             $Profiles->{'US-ME'} = # Maine
565             {
566             %{$Profiles->{'US'}}
567             };
568             $Profiles->{'US-MH'} = # Marshall Islands
569             {
570             %{$Profiles->{'US'}}
571             };
572             $Profiles->{'US-MI'} = # Michigan
573             {
574             %{$Profiles->{'US'}}
575             };
576             $Profiles->{'US-MN'} = # Minnesota
577             {
578             %{$Profiles->{'US'}}
579             };
580             $Profiles->{'US-MO'} = # Missouri
581             {
582             %{$Profiles->{'US'}}
583             };
584             $Profiles->{'US-MP'} = # Northern Mariana Islands
585             {
586             %{$Profiles->{'US'}}
587             };
588             $Profiles->{'US-MS'} = # Mississippi
589             {
590             %{$Profiles->{'US'}}
591             };
592             $Profiles->{'US-MT'} = # Montana
593             {
594             %{$Profiles->{'US'}}
595             };
596             $Profiles->{'US-NC'} = # North Carolina
597             {
598             %{$Profiles->{'US'}}
599             };
600             $Profiles->{'US-ND'} = # North Dakota
601             {
602             %{$Profiles->{'US'}}
603             };
604             $Profiles->{'US-NE'} = # Nebraska
605             {
606             %{$Profiles->{'US'}}
607             };
608             $Profiles->{'US-NH'} = # New Hampshire
609             {
610             %{$Profiles->{'US'}}
611             };
612             $Profiles->{'US-NJ'} = # New Jersey
613             {
614             %{$Profiles->{'US'}}
615             };
616             $Profiles->{'US-NM'} = # New Mexico
617             {
618             %{$Profiles->{'US'}}
619             };
620             $Profiles->{'US-NV'} = # Nevada
621             {
622             %{$Profiles->{'US'}}
623             };
624             $Profiles->{'US-NY'} = # New York
625             {
626             %{$Profiles->{'US'}}
627             };
628             $Profiles->{'US-OH'} = # Ohio
629             {
630             %{$Profiles->{'US'}}
631             };
632             $Profiles->{'US-OK'} = # Oklahoma
633             {
634             %{$Profiles->{'US'}}
635             };
636             $Profiles->{'US-OR'} = # Oregon
637             {
638             %{$Profiles->{'US'}}
639             };
640             $Profiles->{'US-PA'} = # Pennsylvania
641             {
642             %{$Profiles->{'US'}}
643             };
644             $Profiles->{'US-PR'} = # Puerto Rico
645             {
646             %{$Profiles->{'US'}}
647             };
648             $Profiles->{'US-PW'} = # Palau
649             {
650             %{$Profiles->{'US'}}
651             };
652             $Profiles->{'US-RI'} = # Rhode Island
653             {
654             %{$Profiles->{'US'}}
655             };
656             $Profiles->{'US-SC'} = # South Carolina
657             {
658             %{$Profiles->{'US'}}
659             };
660             $Profiles->{'US-SD'} = # South Dakota
661             {
662             %{$Profiles->{'US'}}
663             };
664             $Profiles->{'US-TN'} = # Tennessee
665             {
666             %{$Profiles->{'US'}}
667             };
668             $Profiles->{'US-TX'} = # Texas
669             {
670             %{$Profiles->{'US'}}
671             };
672             $Profiles->{'US-UT'} = # Utah
673             {
674             %{$Profiles->{'US'}}
675             };
676             $Profiles->{'US-VA'} = # Virginia
677             {
678             %{$Profiles->{'US'}}
679             };
680             $Profiles->{'US-VI'} = # Virgin Islands
681             {
682             %{$Profiles->{'US'}}
683             };
684             $Profiles->{'US-VT'} = # Vermont
685             {
686             %{$Profiles->{'US'}}
687             };
688             $Profiles->{'US-WA'} = # Washington
689             {
690             %{$Profiles->{'US'}}
691             };
692             $Profiles->{'US-WI'} = # Wisconsin
693             {
694             %{$Profiles->{'US'}}
695             };
696             $Profiles->{'US-WV'} = # West Virginia
697             {
698             %{$Profiles->{'US'}}
699             };
700             $Profiles->{'US-WY'} = # Wyoming
701             {
702             %{$Profiles->{'US'}}
703             };
704              
705             # Thanks to:
706             # M Lyons
707             # Larry Rosler
708             # Geoff Baskwill
709             # Simon Perreault
710              
711             $Profiles->{'CA'} = # Canada
712             {
713             "New Year's Day" => "Jan/01",
714             "Good Friday" => "-2",
715             "Labour Day" => "1/Mon/Sep",
716             "Christmas Day" => "Dec/25"
717             };
718              
719             sub CA_QC_Dollard # First Monday before May 25
720             {
721 1     1 0 3 my($year,$label) = @_;
722 1         4 my($dow) = Day_of_Week($year, 5, 25);
723 1         6 return( Add_Delta_Days($year, 5, 25, 1-$dow) );
724             }
725              
726             $Profiles->{'CA-AB'} = # Alberta
727             {
728             %{$Profiles->{'CA'}},
729             "Family Day" => "3/Mon/Feb",
730             "Victoria Day" => "May/22",
731             "Canada Day" => "Jul/01",
732             "Thanksgiving Day" => "2/Mon/Oct",
733             "Remembrance Day" => "Nov/11"
734             };
735             $Profiles->{'CA-BC'} = # British Columbia
736             {
737             %{$Profiles->{'CA'}},
738             "Victoria Day" => "May/22",
739             "Canada Day" => "Jul/01",
740             "British Columbia Day" => "1/Mon/Aug",
741             "Thanksgiving Day" => "2/Mon/Oct",
742             "Remembrance Day" => "Nov/11"
743             };
744             $Profiles->{'CA-MB'} = # Manitoba
745             {
746             %{$Profiles->{'CA'}},
747             "Victoria Day" => "May/22",
748             "Canada Day" => "Jul/01",
749             "Thanksgiving Day" => "2/Mon/Oct"
750             };
751             $Profiles->{'CA-NB'} = # New Brunswick
752             {
753             %{$Profiles->{'CA'}},
754             "Canada Day" => "Jul/01",
755             "New Brunswick Day" => "1/Mon/Aug"
756             };
757             $Profiles->{'CA-NF'} = # Newfoundland
758             {
759             %{$Profiles->{'CA'}},
760             "Memorial Day" => "Jul/01"
761             };
762             $Profiles->{'CA-NS'} = # Nova Scotia
763             {
764             %{$Profiles->{'CA'}},
765             "Canada Day" => "Jul/01"
766             };
767             $Profiles->{'CA-NT'} = # Northwest Territories and Nunavut
768             {
769             %{$Profiles->{'CA'}},
770             "Victoria Day" => "May/22",
771             "Canada Day" => "Jul/01",
772             "Thanksgiving Day" => "2/Mon/Oct",
773             "Remembrance Day" => "Nov/11"
774             };
775             $Profiles->{'CA-ON'} = # Ontario
776             {
777             %{$Profiles->{'CA'}},
778             "Victoria Day" => "May/22",
779             "Canada Day" => "Jul/01",
780             "Family Day" => "3/Mon/Feb", # Thanks to
781             "Civic Holiday" => "1/Mon/Aug", # Iain Dwyer
782             "Thanksgiving Day" => "2/Mon/Oct",
783             "Boxing Day" => "Dec/26"
784             };
785             $Profiles->{'CA-PE'} = # Prince Edward Island
786             {
787             %{$Profiles->{'CA'}},
788             "Canada Day" => "Jul/01"
789             };
790             $Profiles->{'CA-QC'} = # Québec
791             {
792             "Jour de l'an" => "Jan/01",
793             "Vendredi Saint" => "-2",
794             "Pâques" => "+0",
795             "Lundi de Pâques" => "+1",
796             "Fête de Dollard" => \&CA_QC_Dollard,
797             "Fête du Québec" => "Jun/24",
798             "Fête du Canada" => "Jul/01",
799             "Fête du Travail" => "1/Mon/Sep",
800             "Action de Grâce" => "2/Mon/Oct",
801             "Noël" => "Dec/25"
802             };
803             $Profiles->{'CA-SK'} = # Saskatchewan
804             {
805             %{$Profiles->{'CA'}},
806             "Victoria Day" => "May/22",
807             "Canada Day" => "Jul/01",
808             "Saskatchewan Day" => "1/Mon/Aug",
809             "Thanksgiving Day" => "2/Mon/Oct",
810             "Remembrance Day" => "Nov/11"
811             };
812             $Profiles->{'CA-YK'} = # Yukon Territory
813             {
814             %{$Profiles->{'CA'}},
815             "Victoria Day" => "May/22",
816             "Canada Day" => "Jul/01",
817             "Discovery Day" => "3/Mon/Aug",
818             "Thanksgiving Day" => "2/Mon/Oct",
819             "Remembrance Day" => "Nov/11"
820             };
821              
822             # Thanks to:
823             # Nora Elia Castillo
824              
825             $Profiles->{'MX'} = # Mexico
826             {
827             "Año Nuevo" => "01-01",
828             "Día de la Constitución" => "05-02",
829             "Natalicio de Benito Juarez" => "21-03",
830             "Día del Trabajo" => "01-05",
831             "Día de la Independencia" => "16-09",
832             "Revolución Mexicana" => "20-11",
833             "Navidad" => "25-12"
834             };
835              
836             # Thanks to:
837             # Slawek Szmyd
838             # Marcin Wlazlowski
839              
840             $Profiles->{'PL'} = # Polska
841             {
842             "Nowy Rok" => "01.01.",
843             "Trzech Kroli" => "#06.01.",
844             "Dzien Babci" => "#21.01.",
845             "Dzien Dziadka" => "#22.01.",
846             "Walentynki" => "#14.02.",
847             "Dzien Kobiet" => "#08.03.",
848              
849             "Tlusty Czwartek" => "#-52",
850             "Ostatki" => "#-47",
851             "Sroda Popielcowa" => "#-46",
852             "Niedziela Palmowa" => "#-7",
853             "Wielkanoc" => "+0",
854             "Poniedzialek Wielkanocny" => "+1",
855             "Zielone Swiatki" => "#+49",
856             "Boze Cialo" => "+60",
857              
858             "Prima Aprilis" => "#01.04.",
859             "Swieto Pracy" => "01.05.",
860             "Swieto Narodowe 3 Maja" => "03.05.",
861             "Dzien Matki" => "#26.05.",
862             "Dzien Dziecka" => "#01.06.",
863             "Dzien Ojca" => "#23.06.",
864             "Wniebowziecie NMP" => "15.08.",
865             "Dzien Nauczyciela" => "#14.10.",
866             "Halloween" => "#Oct/31",
867             "Wszystkich Swietych" => "01.11.",
868             "Dzien Zaduszny" => "#02.11",
869             "Narodowe Swieto Niepodleglosci" => "11.11.",
870             "Andrzejki" => "#30.11.",
871             "Mikolajki" => "#06.12.",
872             "Wigilia" => "#24.12.",
873             "Boze Narodzenie pierwszy dzien Swiat" => "25.12.",
874             "Boze Narodzenie drugi dzien Swiat" => "26.12.",
875             "Sylwester" => "#31.12."
876             };
877              
878             $Profiles->{'PL-SW'} = # kalendarz z wieksza iloscia Swiat
879             {
880             %{$Profiles->{'PL'}},
881             "Wielki Czwartek" => "#-3",
882             "Wielki Piatek" => "#-2",
883             "Poczatek Adwentu" => \&Advent1,
884             "Swieto Dziekczynienia" => "#4/Thu/Nov"
885             };
886              
887             ## ISO-Latin-2:
888             #
889             ## Thanks to:
890             ## S³awek Szmyd
891             ## Marcin Wlaz³owski
892             #
893             #$Profiles->{'PL'} = # Polska
894             #{
895             # "Nowy Rok" => "01.01.",
896             # "Trzech Króli" => "#06.01.",
897             # "Dzieñ Babci" => "#21.01.",
898             # "Dzieñ Dziadka" => "#22.01.",
899             # "Walentynki" => "#14.02.",
900             # "Dzieñ Kobiet" => "#08.03.",
901             #
902             # "T³usty Czwartek" => "#-52",
903             # "Ostatki" => "#-47",
904             # "¦roda Polpielcowa" => "#-46",
905             # "Niedziela Palmowa" => "#-7",
906             # "Wielkanoc" => "+0",
907             # "Poniedzia³ek Wielkanocny" => "+1",
908             # "Zielone ¦wi±tki" => "#+49",
909             # "Bo¿e Cia³o" => "+60",
910             #
911             # "Prima Aprilis" => "#01.04.",
912             # "¦wiêto Pracy" => "01.05.",
913             # "¦wiêto Narodowe 3 Maja" => "03.05.",
914             # "Dzieñ Matki" => "#26.05.",
915             # "Dzieñ Dziecka" => "#01.06.",
916             # "Dzieñ Ojca" => "#23.06.",
917             # "Wniebowziêcie NMP" => "15.08.",
918             # "Dzieñ Nauczyciela" => "#14.10.",
919             # "Halloween" => "#Oct/31",
920             # "Wszystkich ¦wiêtych" => "01.11.",
921             # "Dzieñ Zaduszny" => "#02.11",
922             # "Narodowe ¦wiêto Niepodleg³o¶ci" => "11.11.",
923             # "Andrzejki" => "#30.11.",
924             # "Miko³ajki" => "#06.12.",
925             # "Wigilia" => "#24.12.",
926             # "Bo¿e Narodzenie pierwszy dzieñ ¦wi±t" => "25.12.",
927             # "Bo¿e Narodzenie drugi dzieñ ¦wi±t" => "26.12.",
928             # "Sylwester" => "#31.12."
929             #};
930             #
931             #$Profiles->{'PL-SW'} = # kalendarz z wieksza iloscia Swiat
932             #{
933             # %{$Profiles->{'PL'}},
934             # "Wielki Czwartek" => "#-3",
935             # "Wielki Pi±tek" => "#-2",
936             # "Pocz±tek Adwentu" => \&Advent1,
937             # "¦wiêto Dziêkczynienia" => "#4/Thu/Nov"
938             #};
939              
940             $Profiles->{'AT'} = # Österreich
941             {
942             "Neujahr" => "01.01.",
943             "Dreikönigstag" => "06.01.",
944             "Karfreitag" => "#-2", # regional unterschiedlich
945             "Ostersonntag" => "+0",
946             "Ostermontag" => "+1",
947             "Staatsfeiertag" => "01.05.",
948             "Christi Himmelfahrt" => "+39",
949             "Pfingstsonntag" => "+49",
950             "Pfingstmontag" => "+50",
951             "Fronleichnam" => "+60",
952             "Mariä Himmelfahrt" => "15.08.",
953             "Nationalfeiertag" => "26.10.",
954             "Allerheiligen" => "01.11.",
955             "Mariä Empfängnis" => "08.12.",
956             "Christtag" => "25.12.",
957             "Stephanitag" => "26.12."
958             };
959              
960             # Thanks to:
961             # Herbert Liechti
962             # Marco Hunn
963             # Aldo Calpini
964              
965             $Profiles->{'CH-DE'} = # Schweiz - Deutsch
966             {
967             "Neujahr" => "01.01.",
968             "Dreikönigstag" => "06.01.",
969             "Karfreitag" => "#-2",
970             "Ostersonntag" => "+0",
971             "Ostermontag" => "+1",
972             "Auffahrt" => "+39",
973             "Pfingstsonntag" => "+49",
974             "Pfingstmontag" => "+50",
975             "Fronleichnam" => "#+60",
976             "Bundesfeiertag" => "01.08.",
977             "Mariä Himmelfahrt" => "#15.08.",
978             "Allerheiligen" => "#01.11.",
979             "Weihnachten" => "25.12.",
980             "Stefanstag" => "26.12."
981             };
982             $Profiles->{'CH-FR'} = # Suisse - Français
983             {
984             "Nouvel An" => "01.01.",
985             "Épiphanie" => "06.01.",
986             "Vendredi Saint" => "#-2",
987             "Pâques" => "+0",
988             "Lundi de Pâques" => "+1",
989             "L'Ascension" => "+39",
990             "La Pentecôte" => "+49",
991             "Lundi de Pentecôte" => "+50",
992             "Fête Dieu" => "#+60",
993             "Fête fédérale" => "01.08.",
994             "Assomption" => "#15.08.",
995             "Toussaint" => "#01.11.",
996             "Nöel" => "25.12.",
997             "St. Etienne" => "26.12."
998             };
999             $Profiles->{'CH-IT'} = # Switzerland - Italian
1000             {
1001             "Capo d'Anno" => "01.01.",
1002             "Epifania" => "06.01.",
1003             "Venerdì Santo" => "#-2",
1004             "Pasqua" => "+0",
1005             "Lunedì di Pasqua" => "+1",
1006             "Ascensione" => "+39",
1007             "Pentecoste" => "+49",
1008             "Lunedì di Pentecoste" => "+50",
1009             "Corpus Domini" => "#+60",
1010             "Festa federale" => "01.08.",
1011             "Assunzione di M.V." => "#15.08.",
1012             "Ognissanti" => "#01.11.",
1013             "S. Natale" => "25.12.",
1014             "S. Stefano" => "26.12."
1015             };
1016             $Profiles->{'CH-RM'} = # Swizra rumantscha (Switzerland - Rhaeto-Romance)
1017             {
1018             "Büman" => "01.01.",
1019             "Di da la Babania" => "#06.01.",
1020             "Venderdi sonch" => "-2",
1021             "Dumengia da Pasqua" => "+0",
1022             "Firà da Pasqua" => "+1",
1023             "Ascensiun" => "+39",
1024             "Dumengia da Tschinquaisma" => "+49",
1025             "Firà da Tschinquaisma" => "+50",
1026             "Sonch sang" => "#+60",
1027             "Festa federala" => "01.08.",
1028             "Assunziun da Maria" => "#15.08.",
1029             "Festa da tuot ils sonchs" => "#01.11.",
1030             "Festa da Nadal" => "25.12.",
1031             "Stefan sonch" => "26.12."
1032             };
1033              
1034             # Thanks to:
1035             # François Desarmenien
1036             # Arnaud Calvo
1037             # Jean Forget
1038             # Cedric Bouvier
1039             # Julien Quint
1040              
1041             $Profiles->{'FR'} = # France
1042             {
1043             "Jour de l'An" => "01.01.",
1044             "Épiphanie" => "#06.01.",
1045             "Chandeleur" => "#02.02.",
1046             "Mardi-Gras" => "#-47",
1047             "Mercredi des Cendres" => "#-46",
1048             "Dimanche des Rameaux" => "-7",
1049             "Pâques" => "+0",
1050             "Lundi de Pâques" => "+1",
1051             "Fin de Guerre d'Algérie" => "#19.03.", # Contrat d'Evian 19.03.1962
1052             "Fête du Travail" => "01.05.",
1053             "Victoire 1945" => "08.05.",
1054             "Saint Jean" => "#24.06.",
1055             "Ascension" => "+39",
1056             "Pentecôte" => "+49",
1057             "Lundi de Pentecôte" => "+50",
1058             "Fête Nationale" => "14.07.",
1059             "Assomption" => "15.08.",
1060             "Toussaint" => "01.11.",
1061             "Jour des Défunts" => "#02.11.",
1062             "Saint Martin" => "#11.11",
1063             "Armistice 1918" => "11.11.",
1064             "Avent" => \&Advent1,
1065             "Noël" => "25.12.",
1066             "Saint Sylvestre" => "#31.12."
1067             };
1068              
1069             $Profiles->{'BE-DE'} = # Belgien
1070             {
1071             "Neujahr" => "01.01.",
1072             "Dreikönigstag" => "#06.01.",
1073             "Lichtmesse" => "#02.02.",
1074             "Karnevalsdienstag" => "#-47",
1075             "Aschermittwoch" => "#-46",
1076             "Palmsonntag" => "-7",
1077             "Ostersonntag" => "+0",
1078             "Ostermontag" => "+1",
1079             "Tag der Arbeit" => "01.05.",
1080             "Christi Himmelfahrt" => "+39",
1081             "Pfingstsonntag" => "+49",
1082             "Pfingstmontag" => "+50",
1083             "Nationalfeiertag" => "21.07.",
1084             "Mariä Himmelfahrt" => "15.08.",
1085             "Allerheiligen" => "01.11.",
1086             "Allerseelen" => "#02.11.",
1087             "Waffenstillstand 1918" => "11.11.",
1088             "Weihnachten" => "25.12.",
1089             "2. Weihnachtsfeiertag" => "#26.12.",
1090             "Sylvester" => "#31.12."
1091             };
1092              
1093             # Thanks to:
1094             # Hendrik Van Belleghem
1095             # Stefaan Colson
1096              
1097             $Profiles->{'BE-NL'} = # België
1098             {
1099             "Nieuwjaar" => "01.01.",
1100             "Driekoningen" => "#06.01.",
1101             "Lichtmis" => "#02.02.",
1102             "Vastenavond" => "#-47",
1103             "Aswoensdag" => "#-46",
1104             "Palmzondag" => "-7",
1105             "Pasen" => "+0",
1106             "Paasmaandag" => "+1",
1107             "Dag van de arbeid" => "01.05.",
1108             "Hemelvaartsdag" => "+39", # Onze Lieve Heer Hemelvaart
1109             "Pinksteren" => "+49",
1110             "Pinkstermaandag" => "+50",
1111             "Feest van de Vlaamse Gemeenschap" => "#11.07",
1112             "Nationale feestdag" => "21.07.",
1113             "OLV Hemelvaart" => "15.08.", # Onze Lieve Vrouw Hemelvaart
1114             "Allerheiligen" => "01.11.",
1115             "Allerzielen" => "#02.11.",
1116             "Wapenstilstand 1918" => "11.11.",
1117             "Kerstmis" => "25.12.",
1118             "Tweede kerstdag" => "#26.12."
1119             };
1120              
1121             # Thanks to:
1122             # Stefaan Colson
1123             # Stephane Rondal
1124              
1125             $Profiles->{'BE-FR'} = # Belgique
1126             {
1127             "Nouvel An" => "01.01.",
1128             "Épiphanie" => "#06.01.",
1129             "Chandeleur" => "#02.02.",
1130             "Mardi-Gras" => "#-47",
1131             "Mercredi des Cendres" => "#-46",
1132             "Dimanche des Rameaux" => "-7",
1133             "Pâques" => "+0",
1134             "Lundi de Pâques" => "+1",
1135             "Fête du Travail" => "01.05.",
1136             "Ascension" => "+39",
1137             "Pentecôte" => "+49",
1138             "Lundi de Pentecôte" => "+50",
1139             "Fête Nationale" => "21.07.",
1140             "Assomption" => "15.08.",
1141             "Fête de la Communauté Française" => "#27.09.",
1142             "Toussaint" => "01.11.",
1143             "Jour des Défunts" => "#02.11.",
1144             "Armistice 1918" => "11.11.",
1145             "Noël" => "25.12.",
1146             "2ième Jour de Noël" => "#26.12.",
1147             "Saint Sylvestre" => "#31.12."
1148             };
1149              
1150             $Profiles->{'LU-DE'} = # Großherzogtum Luxemburg
1151             {
1152             "Neujahr" => "01.01.",
1153             "Fastnachtsmontag" => "#-48", # regional unterschiedlich
1154             "Ostersonntag" => "+0",
1155             "Ostermontag" => "+1",
1156             "Tag der Arbeit" => "01.05.",
1157             "Christi Himmelfahrt" => "+39",
1158             "Pfingstsonntag" => "+49",
1159             "Pfingstmontag" => "+50",
1160             "Nationalfeiertag" => "23.06.",
1161             "Mariä Himmelfahrt" => "15.08.",
1162             "Allerheiligen" => "01.11.",
1163             "Allerseelen" => "#02.11.", # regional unterschiedlich
1164             "Weihnachten" => "25.12.",
1165             "2. Weihnachtsfeiertag" => "26.12."
1166             };
1167             $Profiles->{'LU-FR'} = # Grand Duché du Luxembourg
1168             {
1169             "Nouvel An" => "01.01.",
1170             "Veille du Mardi Gras" => "#-48", # varie selon la région
1171             "Pâques" => "+0",
1172             "Lundi de Pâques" => "+1",
1173             "Fête du Travail" => "01.05.",
1174             "Ascension" => "+39",
1175             "Pentecôte" => "+49",
1176             "Lundi de Pentecôte" => "+50",
1177             "Jour National" => "23.06.",
1178             "Assomption" => "15.08.",
1179             "Toussaint" => "01.11.",
1180             "Jour des Défunts" => "#02.11.", # varie selon la région
1181             "Noël" => "25.12.",
1182             "2ième Jour de Noël" => "#26.12.",
1183             "Saint Sylvestre" => "#31.12."
1184             };
1185              
1186             $Profiles->{'PT'} = # Portugal
1187             {
1188             "Ano Novo" => "01.01.",
1189             "Terça-Feira de Carnaval" => "-47",
1190             "Paixão de Cristo" => "-2",
1191             "Domingo de Páscoa" => "+0",
1192             "Dia da Liberdade" => "25.04.",
1193             "Dia do Trabalho" => "01.05.",
1194             "Ascensão de Cristo" => "+39",
1195             "Domingo de Pentecostes" => "+49",
1196             "Dia Nacional" => "10.06.",
1197             "Corpus Christi" => "#+60", # varia segundo a região
1198             "Assunção de Maria" => "15.08.",
1199             "Dia da República" => "05.10.",
1200             "Todos os Santos" => "01.11.",
1201             "Dia da Independência" => "01.12.",
1202             "Conceição de Maria" => "08.12.",
1203             "Natal" => "25.12."
1204             };
1205              
1206             # Thanks to:
1207             # Arturo Valdes
1208              
1209             $Profiles->{'ES'} = # España
1210             {
1211             "Año Nuevo" => "01.01.",
1212             "Epifanía del Señor" => "06.01.",
1213             "Día de Santo José" => "#19.03.",
1214             "Jueves Santo" => "#-3",
1215             "Viernes Santo" => "-2",
1216             "Domingo de Páscuas" => "+0",
1217             "Lunes de Páscuas" => "#+1", # varía segundo la region
1218             "Día del Trabajo" => "01.05.",
1219             "Domingo de Pentecostes" => "+49",
1220             "Santiago Apóstol" => "#25.07.",
1221             "Ascensión de la Virgen" => "15.08.", # Ascensión de María
1222             "Fiesta Nacional de España" => "12.10.",
1223             "Todos los Santos" => "01.11.",
1224             "Día de la Constitución" => "06.12.",
1225             "Inmaculada Concepción" => "08.12.", # Día de la Concepción
1226             "Natividad del Señor" => "25.12."
1227             };
1228              
1229             # Thanks to:
1230             # Michele Beltrame
1231             # Aldo Calpini
1232             # Alessio Bragadini
1233              
1234             $Profiles->{'IT'} = # Italia
1235             {
1236             "Capodanno" => "01.01.",
1237             "Epifania" => "06.01.",
1238             "San Valentino" => "#14.02.",
1239             "Festa della Donna" => "#08.03.",
1240             "Festa della Mamma" => "1/Sun/May",
1241             "Martedì Grasso" => "#-47",
1242             "Pasqua" => "+0",
1243             "Lunedì dell'Angelo" => "+1",
1244             "Liberazione d'Italia 1945" => "25.04.",
1245             "Festa del Lavoro" => "01.05.",
1246             "Fondazione della Repubblica 1946" => \&IT_Fondazione,
1247             "Pentecoste" => "+49",
1248             "Ferragosto" => "15.08.",
1249             "Tutti i Santi" => "01.11.",
1250             "Celebrazione dei Defunti" => "#02.11.",
1251             "Giorno dell'Unità Nazionale" => "#04.11.",
1252             "Fine della 1a Guerra Mondiale" => "#04.11.",
1253             "Giorno delle Forze Armate" => "#04.11.",
1254             "Immacolata Concezione" => "08.12.",
1255             "Natale" => "25.12.",
1256             "S. Stefano" => "26.12."
1257             };
1258              
1259             # Fixed thanks to:
1260             # Michele Valzelli
1261              
1262             sub IT_Fondazione
1263             {
1264 1     1 0 2 my($year,$label) = @_;
1265              
1266 1 50       4 if ($year >= 1947)
1267             {
1268 1 50 33     6 if (($year <= 1977) or ($year >= 2000)) { return($year,6,2); }
  1         4  
1269 0         0 else { return($year,6,2,'#'); } # only commemorative
1270             }
1271 0         0 return(); # didn't exist before 1947
1272             }
1273              
1274             # Thanks to:
1275             # Georg Mavridis
1276              
1277             $Profiles->{'GR'} = # Greece
1278             {
1279             "Prwtohronia" => "01.01.", # New Year
1280             "Theofaneia" => "06.01.", # Epifania
1281             "Katharh devtera" => "-48", # Carnival Monday
1282             # "???" => "???", # Annunciation of Maria
1283             "Ethniki giorth 1" => "25.03.", # National Day #1
1284             "Megalh paraskevh" => "-2", # Good Friday
1285             "Kyriakh toy pasha" => "+0", # Easter Sunday
1286             "Devtera toy pasha" => "+1", # Easter Monday
1287             "Analypsews" => "#+39", # Ascension of Christ
1288             "Kyriakh toy agiou pnevmatos" => "+49", # Whitsunday
1289             "Agiou pnevmatos" => "+50", # Whitmonday
1290             "Hmera ths ergasias" => "01.05.", # Labour Day (also commonly called "Prwtomagia")
1291             "Koimhsews theotokoy" => "15.08.", # Ascension of Maria
1292             "Timioy stavrou" => "#14.09.", # Feast of the Elevation of the Cross
1293             "Ethniki giorth 2" => "28.10.", # National Day #2
1294             "Hristougenna" => "25.12.", # Christmas (1st Day)
1295             "Devterh mera hristougennwn" => "26.12.", # Christmas (2nd Day)
1296             };
1297              
1298             # Thanks to:
1299             # Flemming Mahler Larsen
1300              
1301             $Profiles->{'DK'} = # Denmark
1302             {
1303             "Nytårsdag" => "01.01.",
1304             "Hellig tre Konger" => "1/Sun/Jan", # (H3K) - First Sunday of the year
1305             "Fastelavn" => "-49", # 7th Sunday before Easter
1306             "Palme søndag" => "-7", # Sunday before Easter
1307             "Skærtorsdag" => "-3",
1308             "Langfredag" => "-2",
1309             "Påskedag" => "+0",
1310             "2. Påskedag" => "+1",
1311             "Store bededag" => "+26", # 4th Friday after Easter
1312             "Grundlovsdag" => "05.06.",
1313             "Skt. Hans aften" => "23.06.",
1314             "Kristi himmelfart" => "+39",
1315             "Pinsedag" => "+49",
1316             "2. Pinsedag" => "+50",
1317             "Mortensdag" => "11.10.",
1318             "Allehelgen" => "1/Sun/Nov", # Halloween
1319             "1. Advent" => \&Advent,
1320             "2. Advent" => \&Advent,
1321             "3. Advent" => \&Advent,
1322             "4. Advent" => \&Advent,
1323             "Juleaftensdag" => "24.12.",
1324             "1. Juledag" => "25.12.",
1325             "2. Juledag" => "26.12."
1326             };
1327              
1328             # Thanks to:
1329             # H. Merijn Brand
1330             # Johan Vromans
1331             # Abigail
1332             # Elizabeth Mattijsen
1333             # Abe Timmerman
1334             # Jigal van Hemert
1335             # Wim Verhaegen
1336             # Cas Tuyn
1337             # Remco B. Brink
1338             # Can Bican
1339             # Ziya Suzen
1340             # Henk Uijterwaal
1341             # Eric Veldhuyzen
1342              
1343             $Profiles->{'NL'} = # Nederland
1344             {
1345             "Nieuwjaar" => "01-01",
1346             "Driekoningen" => "#06-01",
1347             "Valentijnsdag" => "#14-02",
1348             "Biddag voor het gewas" => "#2/Wed/Mar",
1349             "Carnaval" => "#-48",
1350             "Vastenavond" => "#-47",
1351             "Aswoensdag" => "#-46",
1352             "Een April" => "#01-04",
1353             "Palmpasen" => "-7",
1354             "Witte Donderdag" => "#-3",
1355             "Goede Vrijdag" => "#-2",
1356             "Stille Zaterdag" => "#-1",
1357             "Pasen" => "+0",
1358             "Paasmaandag" => "+1",
1359             "Moederdag" => "2/Sun/May",
1360             "Vaderdag" => "3/Sun/Jun",
1361             "Koninginnedag" => \&NL_Koninginnedag,
1362             "Dodenherdenking" => "#04-05",
1363             "Bevrijdingsdag" => \&NL_Bevrijdingsdag,
1364             "Hemelvaart" => "+39",
1365             "Pinksteren" => "+49",
1366             "Pinkstermaandag" => "+50",
1367             "Trinitatis" => "+56",
1368             "Prinsjesdag" => "#3/Tue/Sep",
1369             "Dierendag" => "#04-10",
1370             "Dankdag voor het gewas" => "#1/Wed/Nov",
1371             "Sint Maarten" => "#11-11",
1372             "Sinterklaasavond" => "#05-12",
1373             "Sinterklaas" => "#06-12",
1374             "Koninkrijksdag" => "#15-12",
1375             "Kerstmis" => "25-12",
1376             "2e Kerstdag" => "26-12"
1377             };
1378              
1379             sub NL_Koninginnedag
1380             {
1381 1     1 0 3 my($year,$label) = @_;
1382 1         1 my(@date);
1383              
1384 1         4 @date = ($year,4,30);
1385 1 50       3 if (Day_of_Week(@date) == 7) { @date = Add_Delta_Days(@date,-1); }
  1         4  
1386 1         5 return(@date);
1387             }
1388              
1389             # Bevrijdingsdag:
1390             #
1391             # 1945 : Liberation from German occupation in World War II
1392             # 1946,1947: Official holiday
1393             # 1948,1949: Afternoon off for government personnel, some local celebrations
1394             # 1950-1957: No official celebrations
1395             # 1958-1981: Commemorative, holiday for government personnel, schools etc.
1396             # 1982-1990: Official holiday for everybody
1397             # 1990-... : Official holiday every 5th year for everybody
1398             #
1399             # See also
1400             # http://www.herdenkenenvieren.nl/utility/print.jsp?detail=2197&contentid=2197&siteid=hev&nofooter=true
1401              
1402             # As far as I know, 'bevrijdingsdag' is an official national celebration
1403             # day for everybody, but this does NOT mean that you do not have to go to
1404             # work. This depends on your employer. In general, for everybody it is
1405             # just a normal work day, except for people working for the government.
1406             #
1407             # See also
1408             # http://home.szw.nl/faq/dsp_faq.cfm?view=3Ddetail&link_id=3D41264
1409             # http://www.abvakabo.net/faq/index.php?page=3Dindex_v2&id=3D333&c=3D91
1410              
1411             sub NL_Bevrijdingsdag
1412             {
1413 1     1 0 3 my($year,$label) = @_;
1414              
1415 1 50       4 if ($year >= 1945)
1416             {
1417 1 50 33     23 if ( ($year <= 1947) or
    0 33        
      33        
      33        
      0        
1418             (($year >= 1982) and ($year <= 1990)) or
1419             (($year > 1990) and (($year % 5) == 0)))
1420             {
1421 1         4 return($year,5,5); # true holiday
1422             }
1423             elsif (($year == 1948) or ($year == 1949))
1424             {
1425 0         0 return($year,5,5,':'); # half day off
1426             }
1427             else
1428             {
1429 0         0 return($year,5,5,'#'); # only commemorative
1430             }
1431             }
1432 0         0 return(); # didn't exist before 1945
1433             }
1434              
1435             # Thanks to:
1436             # Erland Sommarskog
1437             # Magnus Bodin
1438             # Olle E. Johansson
1439              
1440             $Profiles->{'SV'} = # Sverige
1441             {
1442             "Nyårsdagen" => "01.01.",
1443             "Trettondedagsafton" => "#05.01.", # 12 days after Dec 24th
1444             "Trettondedag jul" => "06.01.", # 13 days after Dec 24th
1445             "Tjugondedag Knut" => "#13.01.", # 20 days after Dec 24th according to Olle E. Johansson
1446             "Kyndelsmässodagen" => "#02.02",
1447             "Marie bebådelsedag" => "#25.03",
1448             "Skärtorsdag" => "#-3",
1449             "Långfredagen" => "-2",
1450             "Påskafton" => "#-1", # like a Saturday
1451             "Påskdagen" => "+0",
1452             "Annandag påsk" => "+1",
1453             "Valborgsmässoafton" => "#30.04.",
1454             "Första maj" => "01.05.",
1455             "Syttende maj" => "#17.05.", # not a swedish but a norwegian holiday according to Olle E. Johansson
1456             "Mors dag" => "5/Sun/May", # Last Sun in May
1457             "Fars dag" => "2/Sun/Nov", # 2nd Sun in Nov
1458             "Sveriges nationaldag" => "#06.06.",
1459             "Johannes Döparens dag" => "#24.06.",
1460             "Kristi himmelsfärds dag" => "+39",
1461             "Pingstafton" => "#+48", # like a Saturday
1462             "Pingstdagen" => "+49",
1463             "Annandag pingst" => "+50",
1464             "Midsommarafton" => \&SV_Midsommarafton, # like a Saturday
1465             "Midsommardagen" => \&SV_Midsommardagen,
1466             "Alla helgons dag" => \&SV_Alla_Helgons_Dag,
1467             "Allhelgonadagen" => "#01.11.",
1468             "FN-dagen" => "#24.10.",
1469             "Gustav Adolfs-dagen" => "#06.11.",
1470             "Nobeldagen" => "#10.12.",
1471             "Julafton" => "#24.12.", # like a Saturday
1472             "Juldagen" => "25.12.",
1473             "Annandag jul" => "26.12.",
1474             "Nyårsafton" => "#31.12." # like a Saturday
1475             };
1476              
1477             sub SV_Midsommarafton # Friday that falls on June 19th to 25th
1478             {
1479 1     1 0 3 my($year,$label) = @_;
1480 1         5 return( Add_Delta_Days($year,6,28,
1481             -(Day_of_Week($year,6,28)+2)), '#' );
1482             }
1483             sub SV_Midsommardagen # Saturday that falls on June 20th to 26th
1484             {
1485 1     1 0 2 my($year,$label) = @_;
1486 1         5 return( Add_Delta_Days($year,6,28,
1487             -(Day_of_Week($year,6,28)+1)) );
1488             }
1489             sub SV_Alla_Helgons_Dag # Saturday that falls on Oct 31st to Nov 6th
1490             {
1491 1     1 0 3 my($year,$label) = @_;
1492 1         5 return( Add_Delta_Days($year,11,8,
1493             -(Day_of_Week($year,11,8)+1)) );
1494             }
1495              
1496             # Thanks to:
1497             # Gisle Aas
1498             # Remco B. Brink
1499             # Lars Ole
1500             # Vetle Roeim
1501              
1502             $Profiles->{'NO'} = # Norway
1503             {
1504             "Nyttårsdag" => "01/01",
1505             "Onsdag før Skjærtorsdag" => "#-4", # sometimes half a day off
1506             "Skjærtorsdag" => "-3",
1507             "Langfredag" => "-2",
1508             "Påskedag" => "+0",
1509             "2. Påskedag" => "+1",
1510             "1. mai" => "05/01",
1511             "Grunnlovsdag" => "05/17",
1512             "Kristi himmelfartsdag" => "+39",
1513             "Pinsedag" => "+49",
1514             "2. Pinsedag" => "+50",
1515             "Julaften" => "#12/24", # sometimes half a day off
1516             "Juledag" => "12/25",
1517             "2. Juledag" => "12/26",
1518             "Nyttårsaften" => "#31.12" # sometimes half a day off
1519             };
1520              
1521             ## Thanks to:
1522             ## Sercan Uslu
1523             #
1524             #$Profiles->{'TR'} = # Türkiye
1525             #{
1526             ## National Public Holidays (fixed):
1527             #
1528             # "New Year's Day" => "01-01",
1529             # "National Sovereignty Day" => "23-04",
1530             # "Children's Day" => "23-04",
1531             # "Atatürk Commemoration" => "19-05",
1532             # "Youth and Sports Day" => "19-05",
1533             # "Victory Day" => "30-08",
1534             # "Republic Day" => "29-10",
1535             #
1536             ## Religious Public Holidays (moving):
1537             #
1538             # "Kurban Bayram (Eid al Adha) 1" => "22-02", # only valid in 2002
1539             # "Kurban Bayram (Eid al Adha) 2" => "23-02", # only valid in 2002
1540             # "Kurban Bayram (Eid al Adha) 3" => "24-02", # only valid in 2002
1541             # "Kurban Bayram (Eid al Adha) 4" => "25-02", # only valid in 2002
1542             #
1543             # "Ramazan / Seker Bayram (Eid al Fitr) 1" => "05-12", # only valid in 2002
1544             # "Ramazan / Seker Bayram (Eid al Fitr) 2" => "06-12", # only valid in 2002
1545             # "Ramazan / Seker Bayram (Eid al Fitr) 3" => "07-12" # only valid in 2002
1546             #};
1547              
1548             # Thanks to:
1549             # Jonathan Stowe
1550              
1551             $Profiles->{'GB'} = # Great Britain
1552             {
1553             "New Year's Day" => \&GB_New_Year,
1554             "Good Friday" => "-2",
1555             "Easter Sunday" => "+0",
1556             "Easter Monday" => "+1",
1557             "Early May Bank Holiday" => \&GB_Early_May,
1558             "Late May Bank Holiday" => "5/Mon/May", # Last Monday
1559             #
1560             # Jonathan Stowe told me that spring
1561             # bank holiday is the first Monday after Whitsun, but my pocket
1562             # calendar suggests otherwise. I decided to follow my pocket
1563             # guide and an educated guess ;-), but please correct me if
1564             # I'm wrong!
1565             #
1566             "Summer Bank Holiday" => "5/Mon/Aug", # Last Monday
1567             "Christmas Day" => \&GB_Christmas,
1568             "Boxing Day" => \&GB_Boxing
1569             };
1570              
1571             sub GB_New_Year
1572             {
1573 1     1 0 3 my($year,$label) = @_;
1574 1         3 return( &Next_Monday($year,1,1) );
1575             }
1576             #
1577             # The following formula (also from Jonathan Stowe )
1578             # also contradicts my pocket calendar, but for lack of a better guess I
1579             # left it as it is. Please tell me the correct formula in case this one
1580             # is wrong! Thank you!
1581             #
1582             sub GB_Early_May # May bank holiday is the first Monday after May 1st
1583             {
1584 1     1 0 3 my($year,$label) = @_;
1585 1 50       4 if (Day_of_Week($year,5,1) == 1)
1586 1         3 { return( Nth_Weekday_of_Month_Year($year,5,1,2) ); }
1587             else
1588 0         0 { return( Nth_Weekday_of_Month_Year($year,5,1,1) ); }
1589             }
1590             sub GB_Christmas
1591             {
1592 1     1 0 2 my($year,$label) = @_;
1593 1         3 return( &Next_Monday($year,12,25) );
1594             }
1595             sub GB_Boxing
1596             {
1597 1     1 0 2 my($year,$label) = @_;
1598 1         4 return( &Next_Monday_or_Tuesday($year,12,26) );
1599             }
1600              
1601             # Thanks to:
1602             # Bianca Taylor
1603             # Andie Posey
1604             # Don Simonetta
1605             # Paul Fenwick
1606             # Brian Graham
1607             # Pat Waters
1608             # Stephen Riehm
1609             # http://www.holidayfestival.com/Australia.html
1610             # http://www.earthcalendar.net/countries/2001/australia.html
1611             # Sven Geisler
1612             # Canberra (ACT):
1613             # http://www.workcover.act.gov.au/labourreg/publicholidays.html
1614             # New South Wales (NSW):
1615             # http://www.dir.nsw.gov.au/holidays/index.html
1616             # Northern Territory (NT):
1617             # http://www.nt.gov.au/ocpe/documents/public-holidays/
1618             # Queensland (QLD):
1619             # http://www.wageline.qld.gov.au/publicholidays/list_pubhols.html
1620             # South Australia (SA):
1621             # http://www.sacentral.sa.gov.au/information/pubhols.htm
1622             # Tasmania (TAS):
1623             # http://www.workcover.tas.gov.au/WSTPublish/node/wststatutory.htm
1624             # Victoria (VIC):
1625             # http://www.info.vic.gov.au/resources/publichols.htm
1626             # Western Australia (WA):
1627             # http://www.doplar.wa.gov.au/wages/pub_hol1.htm
1628              
1629             $Profiles->{'AU'} = # Australia
1630             {
1631             "Australia Day" => \&AU_Australia,
1632             "St. Valentine's Day" => "#14.02.",
1633             "Good Friday" => "-2",
1634             "Easter Sunday" => "+0",
1635             "Easter Monday" => "+1",
1636             "Anzac Day" => "25.04.",
1637             "Christmas Day" => \&AU_Christmas,
1638             "Boxing Day" => \&AU_Boxing
1639             };
1640              
1641             sub AU_Australia
1642             {
1643 8     8 0 16 my($year,$label) = @_;
1644 8         28 return( &Next_Monday($year,1,26) );
1645             }
1646             sub AU_Christmas
1647             {
1648 8     8 0 18 my($year,$label) = @_;
1649 8         24 return( &Next_Monday($year,12,25) );
1650             }
1651             sub AU_Boxing
1652             {
1653 8     8 0 14 my($year,$label) = @_;
1654 8         23 return( &Next_Monday_or_Tuesday($year,12,26) );
1655             }
1656             sub AU_New_Year
1657             {
1658 1     1 0 4 my($year,$label) = @_;
1659 1         5 return( &Next_Monday($year,1,1) );
1660             }
1661             sub AU_Lauceston
1662             {
1663 1     1 0 2 my($year,$label) = @_;
1664 1 50       3 if (Nth_Weekday_of_Month_Year($year,2,3,5))
1665 0         0 { return( Nth_Weekday_of_Month_Year($year,2,3,4) ); }
1666             else
1667 1         4 { return( Nth_Weekday_of_Month_Year($year,2,3,3) ); }
1668             }
1669             sub AU_May
1670             {
1671 1     1 0 2 my($year,$label) = @_;
1672 1         3 return( &Next_Monday($year,5,1) );
1673             }
1674             sub AU_QLD_Anzac
1675             {
1676 1     1 0 2 my($year,$label) = @_;
1677 1         3 return( &Sunday_to_Monday($year,4,25) );
1678             }
1679             sub AU_QLD_Brisbane
1680             {
1681 1     1 0 2 my($year,$label) = @_;
1682 1 50       4 if (Nth_Weekday_of_Month_Year($year,8,3,5))
1683 1         3 { return( Nth_Weekday_of_Month_Year($year,8,3,3), '#' ); }
1684             else
1685 0         0 { return( Nth_Weekday_of_Month_Year($year,8,3,2), '#' ); }
1686             }
1687             sub AU_VIC_New_Year
1688             {
1689 1     1 0 2 my($year,$label) = @_;
1690 1         4 return( &Sunday_to_Monday($year,1,1) );
1691             }
1692             sub AU_VIC_Boxing
1693             {
1694 1     1 0 2 my($year,$label) = @_;
1695 1         4 return( &Sunday_to_Monday($year,12,26) );
1696             }
1697              
1698             $Profiles->{'AU-QLD'} = # Queensland
1699             {
1700             %{$Profiles->{'AU'}},
1701             "New Year's Day" => "01.01.",
1702             "Anzac Day" => \&AU_QLD_Anzac,
1703             "Easter Saturday" => "-1",
1704             "Labour Day" => "1/Mon/May",
1705             "Queen's Birthday" => "2/Mon/Jun",
1706             "Royal Show (Brisbane)" => \&AU_QLD_Brisbane
1707             };
1708             $Profiles->{'AU-TAS'} = # Tasmania
1709             {
1710             %{$Profiles->{'AU'}},
1711             "New Year's Day" => "01.01.",
1712             "Regatta Day" => "2/Tue/Feb",
1713             "Lauceston Cup Day" => \&AU_Lauceston,
1714             "King Island Show Day" => "1/Tue/Mar", # uncertain! (maybe Tuesday after 1/Sun/Mar?)
1715             "Eight Hour Day" => "2/Mon/Mar", # dubious, formula probably wrong!
1716             "Easter Saturday" => "-1",
1717             "Queen's Birthday" => "2/Mon/Jun",
1718             "Recreation Day" => "1/Mon/Nov" # only North Tasmania - date not confirmed!
1719             };
1720             $Profiles->{'AU-SA'} = # South Australia
1721             {
1722             %{$Profiles->{'AU'}},
1723             "New Year's Day" => "01.01.",
1724             "Easter Saturday" => "-1",
1725             "Adelaide Cup Day" => "3/Mon/May", # uncertain! (maybe Monday after 3/Sun/May?)
1726             "Queen's Birthday" => "2/Mon/Jun",
1727             "Labour Day" => "1/Mon/Oct",
1728             "Proclamation Day" => "#26.12."
1729             };
1730             $Profiles->{'AU-WA'} = # Western Australia
1731             {
1732             %{$Profiles->{'AU'}},
1733             "New Year's Day" => "01.01.",
1734             "Labour Day" => "1/Mon/Mar",
1735             "Foundation Day" => "1/Mon/Jun",
1736             "Queen's Birthday" => "1/Mon/Oct"
1737             };
1738             $Profiles->{'AU-ACT'} = # Australian Capital Territory
1739             {
1740             %{$Profiles->{'AU'}},
1741             "New Year's Day" => "01.01.",
1742             "Canberra Day" => "2/Mon/Mar", # dubious, formula probably wrong!
1743             "Easter Saturday" => "-1",
1744             "Queen's Birthday" => "2/Mon/Jun",
1745             "Labour Day" => "1/Mon/Oct"
1746             };
1747             $Profiles->{'AU-NSW'} = # New South Wales
1748             {
1749             %{$Profiles->{'AU'}},
1750             "New Year's Day" => \&AU_New_Year,
1751             "Easter Saturday" => "-1",
1752             "Queen's Birthday" => "2/Mon/Jun",
1753             "Labour Day" => "1/Mon/Oct"
1754             };
1755             $Profiles->{'AU-NT'} = # Northern Territory
1756             {
1757             %{$Profiles->{'AU'}},
1758             "New Year's Day" => "01.01.",
1759             "Easter Saturday" => "-1",
1760             "May Day" => \&AU_May,
1761             "Queen's Birthday" => "2/Mon/Jun",
1762             "Picnic Day" => "1/Mon/Aug"
1763             };
1764             $Profiles->{'AU-VIC'} = # Victoria
1765             {
1766             %{$Profiles->{'AU'}},
1767             "New Year's Day" => \&AU_VIC_New_Year,
1768             "Australia Day" => "26.01.",
1769             "Labour Day" => "2/Mon/Mar",
1770             "Queen's Birthday" => "2/Mon/Jun",
1771             "Melbourne Cup Day" => "#1/Tue/Nov", # only in metropolitian municipal districts
1772             "Christmas Day" => "25.12.",
1773             "Boxing Day" => \&AU_VIC_Boxing
1774             };
1775              
1776             # Thanks to:
1777             # John Bolland
1778             # Andie Posey
1779              
1780             $Profiles->{'NZ'} = # New Zealand
1781             {
1782             "New Year's Day" => \&NZ_New_Year,
1783             "Day after New Year's Day" => \&NZ_After_New_Year,
1784             "Waitangi Day" => "06.02.",
1785             "St. Valentine's Day" => "#14.02.",
1786             "St. David's Day" => "#01.03.",
1787             "St. Patrick's Day" => "#17.03.",
1788             "St. George's Day" => "#23.04.",
1789             "St. Andrew's Day" => "#30.11.",
1790             "Good Friday" => "-2",
1791             "Easter Sunday" => "+0",
1792             "Easter Monday" => "+1",
1793             "Anzac Day" => "25.04.",
1794             "Queen's Birthday" => "1/Mon/Jun",
1795             "Labour Day" => \&NZ_Labour,
1796             "Christmas Day" => \&NZ_Christmas,
1797             "Boxing Day" => \&NZ_Boxing,
1798             "Southland" => \&NZ_Southland,
1799             "Wellington" => \&NZ_Wellington,
1800             "Auckland" => \&NZ_Auckland,
1801             "Taranaki" => \&NZ_Taranaki,
1802             "Otago" => \&NZ_Otago,
1803             "South Canterbury" => \&NZ_South_Canterbury,
1804             "Hawkes Bay" => \&NZ_Hawkes_Bay,
1805             "Marlborough" => \&NZ_Marlborough,
1806             "North Canterbury" => \&NZ_North_Central_Canterbury,
1807             "Central Canterbury" => \&NZ_North_Central_Canterbury,
1808             "Chatham Islands" => \&NZ_Chatham_Islands,
1809             "Westland" => \&NZ_Westland,
1810             "Christchurch Show Day" => \&NZ_Christchurch
1811             };
1812              
1813             sub NZ_New_Year
1814             {
1815 1     1 0 2 my($year,$label) = @_;
1816 1         3 return( &Next_Monday($year,1,1) );
1817             }
1818             sub NZ_After_New_Year
1819             {
1820 1     1 0 2 my($year,$label) = @_;
1821 1         4 return( &Next_Monday_or_Tuesday($year,1,2) );
1822             }
1823             sub NZ_Labour
1824             {
1825 1     1 0 2 my($year,$label) = @_;
1826 1         4 return( &Next_Monday($year,10,22) );
1827             }
1828             sub NZ_Christmas
1829             {
1830 1     1 0 2 my($year,$label) = @_;
1831 1         3 return( &Next_Monday($year,12,25) );
1832             }
1833             sub NZ_Boxing
1834             {
1835 1     1 0 2 my($year,$label) = @_;
1836 1         4 return( &Next_Monday_or_Tuesday($year,12,26) );
1837             }
1838              
1839             sub NZ_Southland
1840             {
1841 1     1 0 2 my($year,$label) = @_;
1842 1         4 return( &Next_Monday($year,1,15), '#' );
1843             }
1844             sub NZ_Wellington
1845             {
1846 1     1 0 2 my($year,$label) = @_;
1847 1         4 return( &Next_Monday($year,1,22), '#' );
1848             }
1849             sub NZ_Auckland
1850             {
1851 1     1 0 3 my($year,$label) = @_;
1852 1         5 return( &Next_Monday($year,1,29), '#' );
1853             }
1854             sub NZ_Taranaki
1855             {
1856 1     1 0 167 my($year,$label) = @_;
1857 1         4 return( &Next_Monday($year,3,12), '#' );
1858             }
1859             sub NZ_Otago
1860             {
1861 1     1 0 2 my($year,$label) = @_;
1862 1         4 return( &Next_Monday($year,3,26), '#' );
1863             }
1864             sub NZ_South_Canterbury
1865             {
1866 1     1 0 3 my($year,$label) = @_;
1867 1         4 return( &Next_Monday($year,9,24), '#' );
1868             }
1869             sub NZ_Hawkes_Bay
1870             {
1871 1     1 0 2 my($year,$label) = @_;
1872 1         3 return( &Previous_Friday($year,10,19), '#' );
1873             }
1874             sub NZ_Marlborough
1875             {
1876 1     1 0 3 my($year,$label) = @_;
1877 1         4 return( &Next_Monday($year,10,29), '#' );
1878             }
1879             sub NZ_North_Central_Canterbury
1880             {
1881 2     2 0 3 my($year,$label) = @_;
1882 2         14 return( &Previous_Friday($year,11,16), '#' );
1883             }
1884             sub NZ_Chatham_Islands
1885             {
1886 1     1 0 3 my($year,$label) = @_;
1887 1         4 return( &Next_Monday($year,12,3), '#' );
1888             }
1889             sub NZ_Westland
1890             {
1891 1     1 0 2 my($year,$label) = @_;
1892 1         3 return( &Next_Monday($year,12,3), '#' );
1893             }
1894             sub NZ_Christchurch
1895             {
1896 1     1 0 2 my($year,$label) = @_;
1897 1         4 return( &Previous_Friday($year,11,9), '#' );
1898             }
1899              
1900             # Thanks to:
1901             # Ana Maria Lopes Monteiro
1902             # Pe. Amâncio
1903             # Inêz Hiltrop
1904             # http://www.imagensbahia.com.br/calend.htm
1905             # http://www.hotelonline.com.br/menu/datas.htm
1906             # http://www.mec.gov.br/acs/relpublc/datas.shtm
1907              
1908             $Profiles->{'BR'} = # Brasil
1909             {
1910             # Feriados oficiais variaveis:
1911              
1912             "Carnaval" => "-47",
1913             "Paixão de Cristo" => "-2",
1914             "Corpus Christi" => "+60",
1915              
1916             # Feriados oficiais fixos:
1917              
1918             "Ano Novo" => "01-01",
1919             "Tiradentes (Patrono Cívico da Nação Brasileira)" => "21-04",
1920             "Dia (Mundial) do Trabalho" => "01-05",
1921             "Dia da Independência do Brasil (1822)" => "07-09",
1922             "N. Sra. Aparecida (Padroeira do Brasil)" => "12-10",
1923             "Finados" => "02-11",
1924             "Proclamação da República dos Estados Unidos do Brasil (1889)" => "15-11",
1925             "Natal" => "25-12",
1926              
1927             # Dias comemorativos variaveis:
1928              
1929             "Segunda-Feira de Carnaval" => "#-48",
1930             "Cinzas" => "#-46",
1931             "Aleluia" => "#-1",
1932             "Páscoa" => "#+0",
1933             "Ascensão do Senhor" => "#+39",
1934             "Pentecostes" => "#+49",
1935             "Dia Mundial da Oração" => "#1/Fri/Mar",
1936             "Dia das Mães" => "#2/Sun/May",
1937             "Dia dos Pais" => "#2/Sun/Aug",
1938             "Dia da Bíblia" => "#5/Sun/Sep",
1939             "Dia Universal da Criança" => "#1/Mon/Oct",
1940             "Dia do Securitário" => "#3/Mon/Oct",
1941              
1942             # Sinonimos:
1943              
1944             # "Dia da Ressaca" => "#-46", # >;-)
1945             "Sexta-Feira Santa" => "#-2",
1946             "Dia Mundial da Paz" => "#01-01",
1947             "Confraternização Universal" => "#01-01",
1948             # "Fraternidade Universal" => "#01-01",
1949             "Santos Reis" => "#06-01",
1950             "Inconfidência Mineira" => "#21-04",
1951             "Todas as Almas" => "#02-11",
1952             "Natividade de Jesus" => "#25-12",
1953             # "Natividade do Senhor" => "#25-12",
1954              
1955             # Datas especiais:
1956              
1957             "Eleições" => "#03-10",
1958             "Início do Outono" => "#21-03",
1959             "Início do Inverno" => "#21-06",
1960             "Início da Primavera" => "#23-09",
1961             "Início do Verão" => "#22-12",
1962             # "Começo do Horário de Verão" => "#??-??",
1963             # "Fim do Horário de Verão" => "#??-??",
1964              
1965             # Dias comemorativos (datas contraditorias ou duvidosas):
1966              
1967             "Início da Semana Nacional contra o Alcoolismo" => "#18-02", # (1) = 3/Sun/Feb ?
1968             "Início da Semana da Educação (1ª Semana)" => "#02-07", # (1) = 1/Sun/Jul ?
1969             "Início da Semana do Exército" => "#18-08", # (1) = 3/Sun/Aug ?
1970             "Início da Semana do Livro Escolar" => "#19-08", # (1) = 3/Sun/Aug ?
1971             "Início da Semana do Portador de Síndrome de Down" => "#21-08", # (1) = 4/Sun/Aug ?
1972             "Início da Semana da Pátria" => "#01-09", # (2) = 1/Sun/Sep ?
1973             "Início da Semana do Trânsito" => "#19-09", # (1) = 3/Sun/Sep ?
1974             "Dia do Trânsito" => "#25-09", # (2)
1975             "Início da Semana da Asa" => "#17-10", # (1) = 3/Sun/Oct ?
1976              
1977             "Dia do Agricultor" => "#28-07", # (2)
1978             "Dia do Engenheiro Agrônomo" => "#12-10", # (1)
1979             "Dia do Agrônomo" => "#11-12", # (1)
1980              
1981             "Dia Nacional da Alfabetização" => "#08-09", # (2)
1982             # "Dia da Alfabetização" => "#08-09", # (2)
1983             # "Dia Nacional da Alfabetização" => "#14-11", # (1)
1984             # "Dia Nacional da Alfabetização" => "#15-11", # (1)
1985              
1986             # "Dia da Amizade" => "#23-06", # (1)
1987             "Dia Internacional da Amizade" => "#20-07", # (1)
1988             "Dia Mundial da Amizade" => "#20-07", # (2)
1989             "Dia da Amizade" => "#20-07", # (1)
1990             "Dia do Amigo" => "#20-07", # (1)
1991              
1992             "Dia dos Aposentados" => "#24-01", # (1)
1993             "Dia do Professor Aposentado" => "#15-05", # (1)
1994             "Dia do Funcionário Público Aposentado" => "#17-06", # (2)
1995             "Dia do Aposentado" => "#08-11", # (1)
1996              
1997             "Dia do Idoso" => "#27-02", # (1)
1998             "Dia dos Idosos" => "#07-10", # (1)
1999              
2000             "Dia do Artista" => "#23-08", # (1)
2001             "Dia dos Artistas" => "#24-08", # (1)
2002              
2003             # "Dia do Atleta" => "#10-02", # (1)
2004             "Dia do Atletismo" => "#12-10", # (1)
2005             "Dia do Atleta Profissional" => "#19-12", # (1)
2006             "Dia do Atleta" => "#21-12", # (2)
2007              
2008             "Dia das Bandeiras" => "#30-05", # (1)
2009             "Dia dos Símbolos Nacionais" => "#18-09", # (1)
2010             "Dia da Bandeira" => "#19-11", # (4)
2011              
2012             "Dia dos Bandeirantes" => "#08-08", # (1)
2013             "Dia do Bandeirante" => "#14-11", # (1)
2014              
2015             "Dia do Barbeiro" => "#06-09", # (1)
2016             "Dia do Barbeiro" => "#03-11", # (1)
2017              
2018             "Dia do Bombeiro" => "#01-07", # (1)
2019             "Dia dos Bombeiros Brasileiros" => "#02-07", # (1)
2020              
2021             "Dia do Industrial do Café" => "#12-03", # (1)
2022             "Dia Pan-Americano do Café" => "#14-04", # (1)
2023             "Dia do Café" => "#14-04", # (1)
2024             # "Dia do Café" => "#24-05", # (1)
2025              
2026             "Dia do Carteiro" => "#25-01", # (2)
2027             # "Dia do Carteiro" => "#05-08", # (1)
2028              
2029             "Criação dos Correios no Brasil" => "#25-01", # (1)
2030             "Dia do Correio" => "#08-04", # (1)
2031             "Dia do Correio Aéreo Nacional" => "#12-06", # (1)
2032             "Dia Postal Mundial" => "#09-10", # (1)
2033              
2034             # "Dia Universal da Criança" => "#1/Mon/Oct",
2035             "Dia da Criança" => "#12-10",
2036              
2037             "Dia do Enfermo" => "#14-01", # (1)
2038             "Dia Mundial do Enfermo" => "#11-02", # (1)
2039              
2040             # "Dia da Escola" => "#15-03", # (1)
2041             "Dia da Escola" => "#19-03", # (3)
2042              
2043             "Dia do Escritor Paulista" => "#29-06", # (1)
2044             # "Dia do Escritor" => "#25-07", # (2)
2045             "Dia do Escritor" => "#13-10", # (3)
2046              
2047             "Dia do Estudante (Feriado Escolar)" => "#11-08", # (4)
2048             "Dia Internacional do Estudante" => "#17-11", # (1)
2049              
2050             # "Dia do Folclore" => "#19-08", # (1)
2051             "Dia do Folclore" => "#22-08", # (4)
2052              
2053             "Dia Mundial Sem Fumar" => "#07-04", # (1)
2054             "Dia Mundial do Combate ao Fumo" => "#31-05", # (1)
2055             "Dia Mundial Sem Tabaco" => "#31-05", # (1)
2056             "Dia Nacional de Combate ao Fumo" => "#29-08", # (1)
2057             "Dia do Fumar" => "#16-11", # (1)
2058              
2059             "Dia da Saúde e Nutrição" => "#31-03", # (1)
2060             "Dia Mundial da Saúde" => "#07-04", # (4)
2061             "Dia Nacional da Saúde" => "#05-08", # (4)
2062             "Dia da Saúde Dentária" => "#25-10", # (1)
2063             "Dia Pan-Americano da Saúde" => "#02-12", # (1)
2064              
2065             "Dia do Hino Nacional" => "#13-04", # (1)
2066             "Dia do Hino Nacional" => "#06-09", # (1)
2067              
2068             "Dia do Hoteleiro" => "#11-08", # (1)
2069             "Dia do Hoteleiro" => "#09-11", # (1)
2070              
2071             "Festa de Iemanjá" => "#02-02", # (2)
2072             # "Festa de Iemanjá" => "#08-12", # (1)
2073             "Festa de Iemanjá em São Paulo e Paraíba" => "#08-12", # (1)
2074              
2075             "Fundação da Associação Brasileira de Imprensa (ABI)" => "#07-04", # (1)
2076             "Dia Nacional da Imprensa" => "#01-06", # (1)
2077             "Dia da Liberdade de Imprensa" => "#07-06", # (2)
2078             "Dia Internacional da Liberdade de Imprensa" => "#10-06", # (1)
2079             "Dia da Imprensa" => "#10-09", # (4)
2080              
2081             "Dia da Infância" => "#20-08", # (3)
2082             "Dia da Infância" => "#24-08", # (1)
2083              
2084             "Dia do Jornalista" => "#29-01", # (1)
2085             "Dia do Jornalismo" => "#07-04", # (2)
2086             "Dia Nacional do Jornaleiro" => "#30-09", # (1)
2087              
2088             "Dia dos Jovens" => "#13-04", # (2)
2089             "Dia Internacional do Jovem Trabalhador" => "#24-04", # (4)
2090             "Dia da Juventude Operária Católica" => "#29-04", # (1)
2091             "Dia da Juventude Constitucionalista" => "#23-05", # (1)
2092             "Dia Nacional da Juventude" => "#22-09", # (2)
2093             "Dia Mundial da Juventude" => "#04-10", # (1)
2094              
2095             "Dia Mundial do Leonino" => "#08-10", # (1)
2096             "Dia Mundial do Lions Clube" => "#10-10", # (1)
2097              
2098             "Dia do Livro" => "#19-03", # (2)
2099             # "Dia do Livro" => "#18-04", # (1)
2100             "Dia Nacional do Livro" => "#29-10", # (2)
2101             # "Dia do Livro" => "#23-11", # (1)
2102             "Dia Internacional do Livro" => "#23-11", # (1)
2103              
2104             "Dia Internacional do Livro Infantil" => "#02-04", # (3)
2105             # "Dia Internacional do Livro Infantil" => "#02-09", # (2)
2106             "Dia Nacional do Livro Infantil" => "#18-04", # (3)
2107              
2108             "Dia Oficial da Música" => "#21-11", # (1)
2109             "Dia do Músico" => "#22-11", # (1)
2110              
2111             "Dia Mundial da Água (ONU)" => "#22-03", # (2)
2112             "Dia da Organização das Nações Unidas (ONU)" => "#25-04", # (1)
2113             "Dia das Nações Unidas (ONU) (1945)" => "#24-10", # (4)
2114              
2115             "N. Sra. Rainha da Paz" => "#09-07", # (1)
2116             "N. Sra. Rainha da Paz" => "#22-08", # (1)
2117              
2118             "N. Sra. da Penha (Feriado Escolar)" => "#24-04", # (1)
2119             # "N. Sra. da Penha" => "#24-04", # (2)
2120             # "N. Sra. da Penha" => "#08-09", # (1)
2121              
2122             "Dia da Liberdade de Pensamento" => "#14-07", # (2)
2123             "Dia do Pensamento" => "#13-08", # (1)
2124              
2125             "Dia do Petróleo" => "#29-09", # (1)
2126             "Dia do Petróleo Brasileiro" => "#03-10", # (2)
2127              
2128             "Dia do Profissional de Marketing" => "#08-04", # (1)
2129             "Dia do Profissional de Marketing" => "#08-05", # (1)
2130              
2131             "Dia do Publicitário" => "#01-02", # (1)
2132             "Dia do Publicitário" => "#04-12", # (1)
2133              
2134             "Dia do Repórter" => "#16-02", # (2)
2135             # "Dia do Repórter" => "#17-02", # (1)
2136             "Dia do Repórter Fotográfico" => "#02-09", # (1)
2137              
2138             # "Dia da Televisão" => "#11-08", # (2)
2139             "Santa Clara de Assis (Padroeira da Televisão)" => "#11-08", # (1)
2140             # "Dia da Padroeira da Televisão (Santa Clara de Assis)" => "#12-08", # (1)
2141              
2142             "Santa Isabel" => "#04-07", # (1)
2143             "Santa Isabel" => "#05-11", # (1)
2144              
2145             "Santa Terezinha (Tereza do Menino Jesus)" => "#01-10", # (2)
2146             # "Santa Tereza" => "#15-10", # (1)
2147              
2148             "Dia Mundial das Vocações Sacerdotais" => "#25-04", # (1)
2149             "Dia Mundial das Vocações" => "#26-04", # (1)
2150             "Dia Mundial das Vocações" => "#02-05", # (1)
2151              
2152             "Dia do Comissário de Bordo" => "#31-05", # (1)
2153             "Dia Internacional do Controlador de Vôo" => "#18-10", # (1)
2154             "Dia Mundial do Comissário de Vôo" => "#31-10", # (1)
2155              
2156             # Dias comemorativos fixos (sem garantias!):
2157              
2158             "Dia dos Municípios" => "#01-01",
2159             "Maria Santíssima Mãe de Deus" => "#01-01",
2160             "Dia Nacional da Abreugrafia" => "#03-01",
2161             "Dia da Criação do Estado de Rondônia-RO" => "#04-01",
2162             "Criação da Primeira Tipografia no Brasil" => "#05-01",
2163             "Reis Magos" => "#06-01",
2164             "Dia da Gratidão" => "#06-01",
2165             "Dia da Liberdade de Cultos" => "#07-01",
2166             "Dia do Leitor" => "#07-01",
2167             "Batismo do Senhor" => "#08-01",
2168             "Dia do Fotógrafo" => "#08-01",
2169             "Dia do Fico" => "#09-01",
2170             "Dia do Empresário de Contabilidade" => "#12-01",
2171             "Criação do Museu Nacional de Belas Artes (1937)" => "#13-01",
2172             "Dia Mundial do Compositor" => "#15-01",
2173             "Dia do Museu de Arte Moderna do Rio de Janeiro" => "#15-01",
2174             "Dia dos Tribunais de Contas" => "#17-01",
2175             "Dia Nacional do Fusca" => "#20-01",
2176             "Dia de Oxalá" => "#20-01",
2177             "Dia do Farmacêutico" => "#20-01",
2178             "São Sebastião (Padroeiro da Cidade do Rio de Janeiro)" => "#20-01",
2179             "Dia Mundial da Religião" => "#21-01",
2180             "Santa Inês" => "#21-01",
2181             "São Vicente" => "#22-01",
2182             "Dia da Previdência Social" => "#24-01",
2183             "Instituição do Casamento Cívil no Brasil" => "#24-01",
2184             "Promulgação da Constituição (1967)" => "#24-01",
2185             "Fundação da Cidade de São Paulo (1554)" => "#25-01",
2186             "Elevação do Brasil a Vice-Reinado (1763)" => "#27-01",
2187             "Santa Ângela de Médici" => "#27-01",
2188             "Abertura dos Pontos no Brasil (1808)" => "#28-01",
2189             "Dia Nacional das Histórias em Quadrinhos" => "#30-01",
2190             "Dia da Saudade" => "#30-01",
2191             "Dia do Portuário (Portuária)" => "#30-01",
2192             "Dia Mundial do Mágico" => "#31-01",
2193             "São João Bosco" => "#31-01",
2194             "Dia da Solidariedade" => "#31-01",
2195             "Dia do Agente Fiscal" => "#02-02",
2196             "N. Sra. dos Navegantes" => "#02-02",
2197             "São Brás" => "#03-02",
2198             "Dia da Papiloscopia" => "#05-02",
2199             "Dia do Datiloscopista (Datiloscopia)" => "#05-02",
2200             "Dia do Gráfico" => "#07-02",
2201             "Santa Apolônia (Dentistas)" => "#09-02",
2202             "Criação da Casa da Moeda" => "#10-02",
2203             "Santa Escolástica" => "#10-02",
2204             "Dia do Zelador" => "#11-02",
2205             "N. Sra. de Lourdes" => "#11-02",
2206             "Dia Estadual do Ministério Público (SP)" => "#12-02",
2207             "1ª Transmissão da TV em Cores (1972)" => "#16-02",
2208             "Dia do Esportista" => "#19-02",
2209             "Data Festiva do Exército" => "#21-02",
2210             "Dia Nacional do Rotary (Dia do Rotariano)" => "#23-02",
2211             "Promulgação da Primeira Constituição Republicana (1891)" => "#24-02",
2212             "Criação do Ministério das Comunicações" => "#25-02",
2213             "Dia Nacional do Livro Didático" => "#27-02",
2214             "Dia do Agente Fiscal da Receita Federal" => "#27-02",
2215             "Dia da Vindima" => "#01-03",
2216             "Fundação da Cidade do Rio de Janeiro (1565)" => "#01-03",
2217             "Dia Nacional do Turismo" => "#02-03",
2218             "Dia do Meteorologista" => "#03-03",
2219             "Dia do Filatelista Brasileiro" => "#05-03",
2220             "Dia dos Fuzileiros Navais" => "#07-03",
2221             "Dia Internacional da Mulher" => "#08-03",
2222             "Dia do Telefone" => "#10-03",
2223             "São Domingos Sávio" => "#10-03",
2224             "Dia do Bibliotecário" => "#12-03",
2225             "Fundação da Cidade de Recife (1537)" => "#12-03",
2226             "Semana Nacional da Biblioteca" => "#12-03",
2227             "Dia Nacional da Poesia" => "#14-03",
2228             "Dia do Agente Autônomo de Investimentos" => "#14-03",
2229             "Dia do Conservador" => "#14-03",
2230             "Dia do Vendedor de Livros" => "#14-03",
2231             "Dia Mundial do Consumidor" => "#15-03",
2232             "Dia da Constituição" => "#15-03",
2233             "Dia do Carpinteiro" => "#19-03",
2234             "Dia do Consertador" => "#19-03",
2235             "Dia do Marceneiro" => "#19-03",
2236             "São José (Padroeiro da Igreja Universal)" => "#19-03",
2237             "Dia Internacional para a Eliminação da Discriminação Racial" => "#21-03",
2238             "Dia Universal do Teatro" => "#21-03",
2239             "Dia Internacional da Floresta" => "#21-03",
2240             "Dia Mundial do Meteorológico" => "#23-03",
2241             "Dia do Cacau" => "#26-03",
2242             "Dia do Circo" => "#27-03",
2243             "Dia do Diagramador" => "#28-03",
2244             "Dia do Revisor" => "#28-03",
2245             "Aniversário do Golpe Militar (1964)" => "#31-03",
2246             "Dia da Integração Nacional" => "#31-03",
2247             "Dia da Mentira" => "#01-04",
2248             "Dia do Humanismo" => "#01-04",
2249             "Dia do Propagandista" => "#02-04",
2250             "São Francisco de Paula" => "#02-04",
2251             "Dia Nacional do Parkinsoniano" => "#04-04",
2252             "Dia do Corretor" => "#07-04",
2253             "Dia do Médico Legista" => "#07-04",
2254             "Dia Mundial do Combate ao Câncer" => "#08-04",
2255             "Dia da Natação" => "#08-04",
2256             "Dia Nacional do Aço" => "#09-04",
2257             "Endoenças" => "#09-04",
2258             "Dia da Engenharia do Exército Brasileiro" => "#10-04",
2259             "Fundação do Exército da Salvação" => "#10-04",
2260             "Aniversário da Organização Internacional do Trabalho" => "#11-04",
2261             "Dia da Intendência do Exército Brasileiro" => "#12-04",
2262             "Dia do Obstetra / da Obstetriz" => "#12-04",
2263             "Aniversario da Loteria Esportiva (1970)" => "#13-04",
2264             "Dia do Office-Boy" => "#13-04",
2265             "Dia Pan-Americano" => "#14-04",
2266             "Dia da América" => "#14-04",
2267             "Dia Mundial do Desenhista" => "#15-04",
2268             "Dia da Conservação do Solo" => "#15-04",
2269             "Dia da Convenção do Solo" => "#15-04",
2270             "Dia do Desarmamento Infantil" => "#15-04",
2271             "Nascimento de Monteiro Lobato (Taubaté-SP)" => "#18-04",
2272             "Dia do Índio" => "#19-04",
2273             "Santo Expedito" => "#19-04",
2274             "Dia do Diplomata" => "#20-04",
2275             "Dia da Latinidade" => "#21-04",
2276             "Dia da Polícia Civil" => "#21-04",
2277             "Dia Internacional da Terra" => "#21-04",
2278             "Dia do Metalúrgico" => "#21-04",
2279             "Fundação da Cidade de Brasília-DF (1960)" => "#21-04",
2280             "Morre Tancredo de Almeida Neves (1985)" => "#21-04",
2281             "Descobrimento do Brasil (1500)" => "#22-04",
2282             "Dia Mundial da Terra" => "#22-04",
2283             "Dia da Aviação de Caça" => "#22-04",
2284             "Dia da Comunidade Luso-Brasileira" => "#22-04",
2285             "Dia da Força Aérea Brasileira" => "#22-04",
2286             "Dia do Planeta Terra" => "#22-04",
2287             "Dia Mundial do Escoteiro (Baden Powell Day)" => "#23-04",
2288             "Dia Mundial do Livro e do Direito Autoral" => "#23-04",
2289             "São Jorge" => "#23-04",
2290             "Dia do Agente de Viagem" => "#24-04",
2291             "Dia do Contabilista" => "#25-04",
2292             "São Marcos" => "#25-04",
2293             "Celebração da Primeira Missa no Brasil" => "#26-04",
2294             "Dia do Goleiro" => "#26-04",
2295             "Dia Nacional da Empregada Doméstica" => "#27-04",
2296             "Dia do Sacerdote" => "#27-04",
2297             "Santa Zita" => "#27-04",
2298             "Dia da Educação" => "#28-04",
2299             "Dia da Sogra" => "#28-04",
2300             "Dia Nacional da Mulher" => "#30-04",
2301             "Dia da OEA (Organização dos Estados Americanos)" => "#30-04",
2302             "Dia do Ferroviário" => "#30-04",
2303             "Inauguração da Primeira Estrada de Ferro no Brasil" => "#30-04",
2304             "Dia da Literatura Brasileira" => "#01-05",
2305             "São José Operário" => "#01-05",
2306             "Dia Nacional do Ex-Combatente" => "#02-05",
2307             "Dia do Sertanejo" => "#03-05",
2308             "Dia do Taquigrafo" => "#03-05",
2309             "São Tiago" => "#03-05",
2310             "Dia Nacional das Comunicações" => "#05-05",
2311             "Dia Nacional do Expedicionário" => "#05-05",
2312             "Dia da Comunidade" => "#05-05",
2313             "Dia das Comunicações" => "#05-05",
2314             "Dia de Rondon" => "#05-05",
2315             "Dia do Pintor" => "#05-05",
2316             "Dia do Trabalhador Preso" => "#05-05",
2317             "Dia do Cartógrafo" => "#06-05",
2318             "Dia do Oftalmologista" => "#07-05",
2319             "Dia do Silêncio" => "#07-05",
2320             "Dia Internacional da Cruz Vermelha" => "#08-05",
2321             "Dia da Vitória (1945)" => "#08-05",
2322             "Dia do Artista Plástico" => "#08-05",
2323             "São Vitor" => "#08-05",
2324             "Término da II Guerra Mundial (1945)" => "#08-05",
2325             "Dia da Cavalaria" => "#10-05",
2326             "Dia do Campo" => "#10-05",
2327             "Dia do Guia de Turismo" => "#10-05",
2328             "Dia da Integração do Telégrafo no Brasil" => "#11-05",
2329             "Dia Mundial da Enfermeira" => "#12-05",
2330             "São Pancrácio" => "#12-05",
2331             "Abolição da Escravatura, Lei Áurea (1888)" => "#13-05",
2332             "Criação da Biblioteca Nacional, Rio de Janeiro-RJ (1811)" => "#13-05",
2333             "Dia da Estrada de Rodagem" => "#13-05",
2334             "Dia da Fraternidade Brasileira" => "#13-05",
2335             "Dia do Automóvel" => "#13-05",
2336             "N. Sra. de Fátima" => "#13-05",
2337             "Dia Continental do Seguro" => "#14-05",
2338             "São Matias" => "#14-05",
2339             "Dia do Assistente Social" => "#15-05",
2340             "Dia do Gerente Bancário" => "#15-05",
2341             "Dia do Gari" => "#16-05",
2342             "Dia Internacional da Comunicação e Telecomunicação" => "#17-05",
2343             "Dia Internacional da Comunicação Social" => "#18-05",
2344             "Dia Internacional dos Museus" => "#18-05",
2345             "Dia dos Vidreiros" => "#18-05",
2346             "Dia do Comissário de Menores" => "#20-05",
2347             "Dia da Língua Nacional" => "#21-05",
2348             "Dia do Apicultor" => "#22-05",
2349             "Santa Rita" => "#22-05",
2350             "Dia da Infantaria" => "#24-05",
2351             "Dia do Datilógrafo" => "#24-05",
2352             "Dia do Detento" => "#24-05",
2353             "Dia do Telegrafista" => "#24-05",
2354             "Dia do Vestibulando" => "#24-05",
2355             "N. Sra. Auxiliadora" => "#24-05",
2356             "Dia da Indústria" => "#25-05",
2357             "Dia do Industrial" => "#25-05",
2358             "Dia do Massagista" => "#25-05",
2359             "Dia do Trabalhador Rural" => "#25-05",
2360             "Dia Nacional da Mata Atlântica" => "#27-05",
2361             "Dia do Profissional Liberal" => "#27-05",
2362             "Dia do Estatístico" => "#29-05",
2363             "Dia do Geógrafo" => "#29-05",
2364             "Dia do Geólogo" => "#30-05",
2365             "Santa Joana d'Arc" => "#30-05",
2366             "Dia Mundial das Comunicações Sociais" => "#31-05",
2367             "Dia do Espírito Santo" => "#31-05",
2368             "Primeira Transmissão de TV no Brasil (1950)" => "#01-06",
2369             "Dia do Duque de Caxias" => "#01-06",
2370             "Dia Mundial do Administrador de Pessoal" => "#03-06",
2371             "Dia Mundial do Meio Ambiente" => "#05-06",
2372             "Dia da Ecologia" => "#05-06",
2373             "Dia do Citricultor" => "#08-06",
2374             "Dia Nacional da Imunização" => "#09-06",
2375             "Dia Nacional do Pe. Anchieta" => "#09-06",
2376             "Dia do Porteiro" => "#09-06",
2377             "Dia do Tênis e do Tenista" => "#09-06",
2378             "Dia da Artilharia" => "#10-06",
2379             "Dia da Língua Portuguesa" => "#10-06",
2380             "Dia da Raça" => "#10-06",
2381             "Batalha Naval do Riachuelo" => "#11-06",
2382             "Dia da Marinha Brasileira" => "#11-06",
2383             "Dia do Educador Sanitário" => "#11-06",
2384             "Dia dos Namorados" => "#12-06",
2385             "Criado o Jardim Botânico do Rio de Janeiro por D. João VI" => "#13-06",
2386             "Dia do Turista" => "#13-06",
2387             "Santo Antônio" => "#13-06",
2388             "Dia Universal de Deus" => "#14-06",
2389             "Dia do Solista" => "#14-06",
2390             "São Vito" => "#15-06",
2391             "Dia da Unidade Nacional" => "#16-06",
2392             "Dia da Imigração Japonesa" => "#18-06",
2393             "Dia do Químico" => "#18-06",
2394             "Dia do Revendedor" => "#20-06",
2395             "Dia Nacional do Luto" => "#21-06",
2396             "Dia Universal Olímpico" => "#21-06",
2397             "Dia da Mídia" => "#21-06",
2398             "Dia do Mel" => "#21-06",
2399             "Dia do Migrante" => "#21-06",
2400             "Nascimento de Machado de Assis, Rio de Janeiro-RJ (1839)" => "#21-06",
2401             "Sagrado Coração de Jesus" => "#22-06",
2402             "Imaculado Coração de Maria" => "#23-06",
2403             "Dia Internacional do Leite" => "#24-06",
2404             "Dia da Comunidade Britânica" => "#24-06",
2405             "Dia das Empresas Gráficas" => "#24-06",
2406             "Dia do Caboclo" => "#24-06",
2407             "Festa Junina (Feriado Escolar)" => "#24-06",
2408             "São João Batista" => "#24-06",
2409             "Dia do Quilo" => "#25-06",
2410             "Dia Nacional de Combate às Drogas" => "#26-06",
2411             "Dia Nacional do Progresso" => "#27-06",
2412             "Dia da Revolução Espiritual" => "#27-06",
2413             "Dia dos Artistas Líricos" => "#27-06",
2414             "Dia da Renovação Espiritual" => "#28-06",
2415             "Dia Internacional do Orgulho Gay" => "#29-06",
2416             "Dia da Telefonista" => "#29-06",
2417             "Dia do Papa" => "#29-06",
2418             "Dia do Pescador" => "#29-06",
2419             "São Pedro e São Paulo" => "#29-06",
2420             "Dia do Economiário" => "#30-06",
2421             "Dia da Vacina BCG" => "#01-07",
2422             "Instituição do Real como Unidade Monetária (1994)" => "#01-07",
2423             "Dia do Hospital" => "#02-07",
2424             "São Tomé" => "#03-07",
2425             "Dia Internacional do Cooperativismo" => "#04-07",
2426             "Criação do IBGE (Instituto Brasileiro de Geografia e Estatística)" => "#06-07",
2427             "Santa Maria Goretti" => "#06-07",
2428             "Dia do Panificador" => "#08-07",
2429             "Dia do Soldado Constitucionalista" => "#09-07",
2430             "N. Sra. Mediugórie" => "#09-07",
2431             "Promulgação da Constituição Republicana (1932)" => "#09-07",
2432             "Dia da Pizza em São Paulo" => "#10-07",
2433             "Dia do Rondonista" => "#11-07",
2434             "São Bento" => "#11-07",
2435             "Dia do Engenheiro Florestal" => "#12-07",
2436             "Dia Mundial do Rock" => "#13-07",
2437             "Dia do Engenheiro de Saneamento" => "#13-07",
2438             "Dia dos Cantores e Compositores Sertanejos" => "#13-07",
2439             "Dia do Propagandista de Laboratório" => "#14-07",
2440             "São Camilo de Lélis" => "#14-07",
2441             "Dia Nacional dos Clubes" => "#15-07",
2442             "Dia do Comerciante" => "#16-07",
2443             "N. Sra. do Carmo" => "#16-07",
2444             "Dia do Protetor de Florestas" => "#17-07",
2445             "Dia da Coroação de D. Pedro" => "#18-07",
2446             "Dia Nacional do Futebol" => "#19-07",
2447             "Dia da Caridade" => "#19-07",
2448             "Dia da Junta Comercial" => "#19-07",
2449             "Dia Pan-Americano do Engenheiro" => "#20-07",
2450             "Dia do Revendedor (de Gasolina)" => "#20-07",
2451             "1ª Vez Que o Homem Pisou na Lua (1969)" => "#21-07",
2452             "Santa Madalena" => "#22-07",
2453             "Dia da Declaração da Maioridade de D. Pedro II (1840)" => "#23-07",
2454             "Dia do Guarda Rodoviário" => "#23-07",
2455             "Dia do Colono" => "#25-07",
2456             "Dia do Motorista" => "#25-07",
2457             "São Cristóvão" => "#25-07",
2458             "Dia da Vovó" => "#26-07",
2459             "Santa Ana" => "#26-07",
2460             "São Joaquim" => "#26-07",
2461             "Dia Nacional de Prevenção de Acidentes de Trabalho" => "#27-07",
2462             "Dia do Motociclista" => "#27-07",
2463             "Santa Marta" => "#29-07",
2464             "São Inácio de Loyola" => "#31-07",
2465             "Dia Nacional do Sêlo" => "#01-08",
2466             "Dia do Tintureiro" => "#03-08",
2467             "São João Maria Vianei" => "#04-08",
2468             "N. Sra. das Neves" => "#05-08",
2469             "Bom Jesus" => "#06-08",
2470             "São Caetano" => "#07-08",
2471             "Dia do Padre" => "#08-08",
2472             "São Lourenço" => "#10-08",
2473             "Dia Internacional da Logosofia" => "#11-08",
2474             "Dia da Consciência Nacional" => "#11-08",
2475             "Dia da Pintura" => "#11-08",
2476             "Dia do Advogado" => "#11-08",
2477             "Dia do Direito" => "#11-08",
2478             "Dia do Garçom" => "#11-08",
2479             "Dia do Magistrado" => "#11-08",
2480             "Dia Nacional das Artes" => "#12-08",
2481             "N. Sra. das Cabeças" => "#12-08",
2482             "Dia do Economista" => "#13-08",
2483             "Dia do Encarcerado" => "#13-08",
2484             "Dia da Unidade Humana" => "#14-08",
2485             "Assunção de Nossa Senhora" => "#15-08",
2486             "Dia da Informática" => "#15-08",
2487             "Dia dos Solteiros" => "#15-08",
2488             "N. Sra. da Glória" => "#15-08",
2489             "São Roque" => "#16-08",
2490             "Criação do Instituto Histórico e Geográfico, Rio de Janeiro-RJ (1838)" => "#18-08",
2491             "Santa Helena" => "#18-08",
2492             "Dia Mundial da Fotografia" => "#19-08",
2493             "Dia do Artista de Teatro" => "#19-08",
2494             "Dia do Maçom" => "#20-08",
2495             "Dia do Excepcional" => "#22-08",
2496             "Dia Internacional em Memória da Escravidão e da Abolição" => "#23-08",
2497             "Dia da Injustiça" => "#23-08",
2498             "Santa Rosa de Lima" => "#23-08",
2499             "São Bartolomeu" => "#24-08",
2500             "Dia do Exército Brasileiro" => "#25-08",
2501             "Dia do Feirante" => "#25-08",
2502             "Dia do Soldado" => "#25-08",
2503             "Dia Nacional do Psicólogo" => "#27-08",
2504             "Dia do Corretor de Imóveis" => "#27-08",
2505             "Santa Mônica" => "#27-08",
2506             "Dia Nacional dos Bancários" => "#28-08",
2507             "Dia da Avicultura" => "#28-08",
2508             "Santo Agostinho" => "#28-08",
2509             "Dia do Nutricionista" => "#31-08",
2510             "São Raimundo Nonato" => "#31-08",
2511             "Dia do Biólogo" => "#03-09",
2512             "Dia da Amazônia" => "#05-09",
2513             "Dia do Oficial de Farmácia" => "#05-09",
2514             "Dia do Alfaiate" => "#06-09",
2515             "Natividade de Nossa Senhora" => "#08-09",
2516             "Dia do Administrador" => "#09-09",
2517             "Dia do Veterinário" => "#09-09",
2518             "Dia da Cruz" => "#14-09",
2519             "Dia do Frevo" => "#14-09",
2520             "N. Sra. das Dores" => "#15-09",
2521             "São Cipriano" => "#16-09",
2522             "Dia da Compreensão Mundial" => "#17-09",
2523             "Promulgação da Constituição do Brasil (1946)" => "#18-09",
2524             "Dia do Teatro" => "#19-09",
2525             "São Genaro" => "#19-09",
2526             "Dia do Funcionário Municipal" => "#20-09",
2527             "Dia do Gaúcho" => "#20-09",
2528             "Dia do Policial Civil" => "#20-09",
2529             "Dia Nacional da Radiodifusão" => "#21-09",
2530             "Dia da Árvore" => "#21-09",
2531             "Dia do Fazendeiro" => "#21-09",
2532             "Dia do Radialista" => "#21-09",
2533             "Dia do Radio" => "#21-09",
2534             "Santa Efigênia" => "#21-09",
2535             "São Mateus" => "#21-09",
2536             "Dia do Soldador" => "#23-09",
2537             "Dia Interamericano/Internacional de Relações Públicas" => "#26-09",
2538             "Dia Mundial do Turismo" => "#27-09",
2539             "Dia do Ancião" => "#27-09",
2540             "Dia do Encanador" => "#27-09",
2541             "São Cosme e Damião" => "#27-09",
2542             "São Vicente de Paulo" => "#27-09",
2543             "Dia da Lei do Sexagenário" => "#28-09",
2544             "Dia da Mãe Preta" => "#28-09",
2545             "Lei do Ventre Livre Sancionada pela Princesa Isabel (1871)" => "#28-09",
2546             "Dia do Anunciante" => "#29-09",
2547             "Dia do Professor de Educação Física" => "#29-09",
2548             "Santos Arcanjos" => "#29-09",
2549             "São Gabriel" => "#29-09",
2550             "São Miguel" => "#29-09",
2551             "Dia Internacional da Navegação" => "#30-09",
2552             "Dia Mundial do Tradutor" => "#30-09",
2553             "Dia da Secretária" => "#30-09",
2554             "São Jerônimo" => "#30-09",
2555             "Dia Nacional do Vereador" => "#01-10",
2556             "Dia Pan-Americano do Vendedor" => "#01-10",
2557             "Dia do Representante Comercial" => "#01-10",
2558             "Dia da Esquadra" => "#01-10",
2559             "Dia do Anjo da Guarda" => "#02-10",
2560             "Dia das Abelhas" => "#03-10",
2561             "Dia Mundial do Dentista" => "#03-10",
2562             "Dia do Latino-Americano" => "#03-10",
2563             "Dia Internacioanl dos Animais" => "#03-10",
2564             "Dia da Ave" => "#04-10",
2565             "Dia da Natureza" => "#04-10",
2566             "Dia do Barman" => "#04-10",
2567             "Dia do Cão" => "#04-10",
2568             "Dia do Poeta" => "#04-10",
2569             "Dia do Radio Interamericano" => "#04-10",
2570             "São Francisco de Assis" => "#04-10",
2571             "Dia Internacional da Ecologia" => "#04-10",
2572             "Dia Mundial dos Animais" => "#05-10",
2573             "Dia das Aves" => "#05-10",
2574             "Promulgação da Nova Constituição do Brasil (1988)" => "#05-10",
2575             "São Benedito" => "#05-10",
2576             "Dia do Compositor" => "#07-10",
2577             "N. Sra. do Rosário" => "#07-10",
2578             "Dia do Nordestino" => "#08-10",
2579             "N. Sra. de Nazaré" => "#10-10",
2580             "Dia do Deficiente Físico" => "#11-10",
2581             "Dia do Teatro Municipal" => "#11-10",
2582             "Descobrimento da América (1492)" => "#12-10",
2583             "Dia da Aclamação de D. Pedro I" => "#12-10",
2584             "Dia da Cirurgia Infantil" => "#12-10",
2585             "Dia do Mar" => "#12-10",
2586             "Inauguração do Cristo Redentor Rio de Janeiro-RJ" => "#12-10",
2587             "Dia da Terapia Ocupacional" => "#13-10",
2588             "Dia do Fisioterapeuta" => "#13-10",
2589             "Dia Nacional da Pecuária" => "#14-10",
2590             "Dia da Normalista" => "#15-10",
2591             "Dia do Professor" => "#15-10",
2592             "Dia Mundial da Alimentação" => "#16-10",
2593             "Santa Edwirges (Endividados)" => "#16-10",
2594             "Dia da Industria Aeronáutica Brasileira" => "#17-10",
2595             "Dia do Eletricista" => "#17-10",
2596             "Dia do Estivador" => "#18-10",
2597             "Dia do Médico" => "#18-10",
2598             "Dia do Pintor (de Parede, de Carro)" => "#18-10",
2599             "São Lucas (Médicos)" => "#18-10",
2600             "Dia do Contato" => "#21-10",
2601             "Dia do MacKenzie" => "#21-10",
2602             "Comemoração do 1º Vôo de Santos Dumont pilotando o 14 Bis (1906)" => "#23-10",
2603             "Dia da Aviação e do Aviador" => "#23-10",
2604             "Dia Mundial do Desenvolvimento" => "#24-10",
2605             "Dia da Democracia" => "#25-10",
2606             "Dia das Missões" => "#25-10",
2607             "Dia do Dentista Brasileiro" => "#25-10",
2608             "Dia do Sapateiro" => "#25-10",
2609             "Dia da Universidade Católica" => "#28-10",
2610             "Dia do Funcionário Público" => "#28-10",
2611             "São Judas Tadeu (Causas Impossíveis)" => "#28-10",
2612             "Dia da Decoração" => "#30-10",
2613             "Dia do Balconista" => "#30-10",
2614             "Dia do Comerciário" => "#30-10",
2615             "São Geraldo" => "#30-10",
2616             "Dia Mundial da Poupança" => "#31-10",
2617             "Todos os Santos" => "#01-11",
2618             "São Lázaro" => "#02-11",
2619             "Dia do Cabeleireiro" => "#03-11",
2620             "Dia do Inventor" => "#04-11",
2621             "Dia Nacional da Cultura" => "#05-11",
2622             "Dia da Ciência" => "#05-11",
2623             "Dia do Cinema Brasileiro" => "#05-11",
2624             "Dia do Radio-Amador" => "#05-11",
2625             "Dia do Técnico em Eletrônica" => "#05-11",
2626             "Ação Católica" => "#07-11",
2627             "Dia Nacional dos Tribunais de Conta" => "#07-11",
2628             "Dia Mundial do Urbanismo" => "#08-11",
2629             "Dia do Município" => "#09-11",
2630             "Dia do Trigo" => "#10-11",
2631             "Dia do Soldado Desconhecido" => "#11-11",
2632             "Dia do Supermercado" => "#12-11",
2633             "Aniversário do Ministério da Educação" => "#14-11",
2634             "Dia Nacional da Alfabetização" => "#14-11",
2635             "Dia do Esporte Amador" => "#15-11",
2636             "Santos Roque Gonzalez e Companheiros" => "#19-11",
2637             "Dia Nacional da Consciência Negra" => "#20-11",
2638             "Dia do Datiloscopista Brasileiro" => "#20-11",
2639             "Dia da Homeopatia" => "#21-11",
2640             "Dia das Saudações" => "#21-11",
2641             "Dia da Solidariedade com o Povo Libanês" => "#22-11",
2642             "Santa Cecília" => "#22-11",
2643             "Dia Nacional do Doador de Sangue" => "#25-11",
2644             "Dia da Baiana do Acarajé" => "#25-11",
2645             "Santa Catarina" => "#26-11",
2646             "N. Sra. das Graças" => "#27-11",
2647             "Dia Mundial de Ação de Graças" => "#28-11",
2648             "Santo André (Apóstolo)" => "#30-11",
2649             "Dia Mundial de Prevenção contra AIDS" => "#01-12",
2650             "Dia do Imigrante" => "#01-12",
2651             "Dia do Numismata" => "#01-12",
2652             "Dia Nacional da Astronomia" => "#02-12",
2653             "Dia Nacional das Relações Públicas" => "#02-12",
2654             "Dia Nacional do Samba" => "#02-12",
2655             "São Francisco Xavier" => "#03-12",
2656             "Dia Mundial da Propaganda" => "#04-12",
2657             "Dia Nacional do Ministério Público" => "#04-12",
2658             "Dia do Orientador Educacional" => "#04-12",
2659             "Dia do Podólogo" => "#04-12",
2660             "Dia do Trabalhador em Minas de Carvão" => "#04-12",
2661             "Santa Bárbara" => "#04-12",
2662             "Dia da Fundação da Associação Comercial de São Paulo (1894)" => "#07-12",
2663             "UNESCO Declara Brasília Patrimônio Cultural da Humanidade (1987)" => "#07-12",
2664             "Aniversário da Avenida Paulista São Paulo-SP (1891)" => "#08-12",
2665             "Dia Nacional da Família" => "#08-12",
2666             "Imaculada Conceição" => "#08-12",
2667             "Dia da Justiça" => "#08-12",
2668             "Dia do Cronista Esportivo" => "#08-12",
2669             "Dia da Criança Defeituosa" => "#09-12",
2670             "Dia do Alcoólatra Recuperado" => "#09-12",
2671             "Dia do Fonoáudiologo" => "#09-12",
2672             "Declaração Universal dos Direitos Humanos" => "#10-12",
2673             "Dia do Palhaço" => "#10-12",
2674             "Dia do Arquiteto" => "#11-12",
2675             "Dia do Engenheiro" => "#11-12",
2676             "Dia do Tango" => "#11-12",
2677             "N. Sra. de Guadalupe" => "#12-12",
2678             "Dia do Avaliador" => "#13-12",
2679             "Dia do Cego" => "#13-12",
2680             "Dia do Marinheiro" => "#13-12",
2681             "Dia do Ótico" => "#13-12",
2682             "Santa Luzia" => "#13-12",
2683             "Dia do Reservista" => "#16-12",
2684             "Dia do Mecânico" => "#20-12",
2685             "Dia do Vizinho" => "#23-12",
2686             "Dia do Órfão" => "#24-12",
2687             "Dia da Lembrança" => "#26-12",
2688             "Santo Estevão" => "#26-12",
2689             "Festa da Sagrada Família" => "#27-12",
2690             "Dia do Salva-Vidas" => "#28-12",
2691             "São Silvestre (Reveillon)" => "#31-12"
2692             };
2693              
2694             $Profiles->{'BR-AC'} = # Acre
2695             {
2696             %{$Profiles->{'BR'}}
2697             };
2698             $Profiles->{'BR-AL'} = # Alagoas
2699             {
2700             %{$Profiles->{'BR'}}
2701             };
2702             $Profiles->{'BR-AP'} = # Amapá
2703             {
2704             %{$Profiles->{'BR'}}
2705             };
2706             $Profiles->{'BR-AM'} = # Amazonas
2707             {
2708             %{$Profiles->{'BR'}}
2709             };
2710             $Profiles->{'BR-BA'} = # Bahia
2711             {
2712             %{$Profiles->{'BR'}}
2713             };
2714             $Profiles->{'BR-CE'} = # Ceará
2715             {
2716             %{$Profiles->{'BR'}}
2717             };
2718             $Profiles->{'BR-DF'} = # Distrito Federal
2719             {
2720             %{$Profiles->{'BR'}},
2721             "Fundação da Cidade de Brasília-DF (1960)" => "#21-04" # feriado em Brasília ?
2722             };
2723             $Profiles->{'BR-ES'} = # Espírito Santo
2724             {
2725             %{$Profiles->{'BR'}},
2726             "N. Sra. da Penha" => "#24-04", # feriado em Vitória e Vila Velha
2727             "Dia da Cidade de Vitória" => "#08-09", # feriado só em Vitória
2728             "Dia da Colonização do Solo Espíritosantense" => "#23-05" # feriado só em Vila Velha
2729             };
2730             $Profiles->{'BR-GO'} = # Goiás
2731             {
2732             %{$Profiles->{'BR'}}
2733             };
2734             $Profiles->{'BR-MA'} = # Maranhão
2735             {
2736             %{$Profiles->{'BR'}}
2737             };
2738             $Profiles->{'BR-MT'} = # Mato Grosso
2739             {
2740             %{$Profiles->{'BR'}}
2741             };
2742             $Profiles->{'BR-MS'} = # Mato Grosso do Sul
2743             {
2744             %{$Profiles->{'BR'}}
2745             };
2746             $Profiles->{'BR-MG'} = # Minas Gerais
2747             {
2748             %{$Profiles->{'BR'}}
2749             };
2750             $Profiles->{'BR-PR'} = # Paraná
2751             {
2752             %{$Profiles->{'BR'}}
2753             };
2754             $Profiles->{'BR-PB'} = # Paraíba
2755             {
2756             %{$Profiles->{'BR'}}
2757             };
2758             $Profiles->{'BR-PA'} = # Pará
2759             {
2760             %{$Profiles->{'BR'}}
2761             };
2762             $Profiles->{'BR-PE'} = # Pernambuco
2763             {
2764             %{$Profiles->{'BR'}},
2765             "Fundação da Cidade de Recife (1537)" => "#12-03" # feriado em Recife ?
2766             };
2767             $Profiles->{'BR-PI'} = # Piauí
2768             {
2769             %{$Profiles->{'BR'}}
2770             };
2771             $Profiles->{'BR-RN'} = # Rio Grande do Norte
2772             {
2773             %{$Profiles->{'BR'}}
2774             };
2775             $Profiles->{'BR-RS'} = # Rio Grande do Sul
2776             {
2777             %{$Profiles->{'BR'}}
2778             };
2779             $Profiles->{'BR-RJ'} = # Rio de Janeiro
2780             {
2781             %{$Profiles->{'BR'}},
2782             "São Sebastião (Padroeiro da Cidade do Rio de Janeiro)" => "#20-01", # feriado no Rio de Janeiro
2783             "Fundação da Cidade do Rio de Janeiro (1565)" => "#01-03" # feriado no Rio de Janeiro
2784             };
2785             $Profiles->{'BR-RO'} = # Rondônia
2786             {
2787             %{$Profiles->{'BR'}},
2788             "Dia da Criação do Estado de Rondônia-RO" => "#04-01", # feriado ?
2789             "Dia de Rondon" => "#05-05", # feriado ?
2790             "Dia do Rondonista" => "#11-07" # feriado ?
2791             };
2792             $Profiles->{'BR-RR'} = # Roraima
2793             {
2794             %{$Profiles->{'BR'}}
2795             };
2796             $Profiles->{'BR-SC'} = # Santa Catarina
2797             {
2798             %{$Profiles->{'BR'}}
2799             };
2800             $Profiles->{'BR-SE'} = # Sergipe
2801             {
2802             %{$Profiles->{'BR'}}
2803             };
2804             $Profiles->{'BR-SP'} = # São Paulo
2805             {
2806             %{$Profiles->{'BR'}},
2807             "Fundação da Cidade de São Paulo (1554)" => "#25-01", # feriado em São Paulo
2808             };
2809             $Profiles->{'BR-TO'} = # Tocantins
2810             {
2811             %{$Profiles->{'BR'}}
2812             };
2813              
2814             # Thanks to:
2815             # Daniel Crown
2816              
2817             $Profiles->{'AR'} = # Argentina
2818             {
2819             "Año Nuevo" => "01-01",
2820             "Día de los Reyes (Epifanía)" => "06-01",
2821             "Día de Malvinas" => "02-04",
2822             "Jueves Santo" => "-3",
2823             "Viernes Santo" => "-2",
2824             "Domingo de Páscuas" => "+0",
2825             "Lunes de Páscuas" => "+1",
2826             "Día del Trabajo" => "01-05",
2827             "Revolución de Mayo" => "25-05",
2828             "Soberanía de las Islas Malvinas" => "10-06",
2829             "Día del Padre" => "3/Sun/Jun",
2830             "Día de la Bandera" => "20-06",
2831             "Día del Niño" => "03-07",
2832             "Día de la Independencia" => "09-07",
2833             "Día de Eva Peron" => "26-07",
2834             "La Asunción" => "15-08",
2835             "Día de San Martin" => "17-08",
2836             "Muerte de San Martin" => "18-08",
2837             "Día de la Raza" => "12-10",
2838             "Día de la Madre" => "3/Sun/Oct",
2839             "Día de Todos los Santos" => "01-11",
2840             "Inmaculada Concepción" => "08-12",
2841             "Navidad" => "25-12"
2842             };
2843              
2844             # Thanks to:
2845             # Jabu Virginia Duma, Giant's Castle Lodge,
2846             # Drakensberg, 3310 Estcourt, KwaZulu-Natal
2847             # Dirk Swart
2848             # http://www.gov.za/sa_overview/holidays.htm
2849             # http://www.gov.za/events/previous/y2kholidays.htm
2850             # Hilda de Jager
2851             # Hennie Meyer
2852              
2853             $Profiles->{'ZA'} = # South Africa
2854             {
2855             "Special Y2K Holiday #1" => \&ZA_Y2K_1,
2856             "Special Y2K Holiday #2" => \&ZA_Y2K_2,
2857             "Special Y2K Holiday #3" => \&ZA_Y2K_3,
2858             "New Year's Day" => \&ZA_New_Year,
2859             "Human Rights Day" => \&ZA_Human_Rights,
2860             "Good Friday" => "-2",
2861             "Easter Sunday" => "+0",
2862             "Family Day" => "+1",
2863             "Freedom Day" => \&ZA_Freedom,
2864             "Workers Day" => \&ZA_Workers,
2865             "Youth Day (Soweto Day)" => \&ZA_Youth,
2866             "National Women's Day" => \&ZA_Women,
2867             "Heritage Day" => \&ZA_Heritage,
2868             "Day of Reconciliation" => \&ZA_Reconciliation,
2869             "Christmas" => \&ZA_Christmas,
2870             "Day of Goodwill" => \&ZA_Goodwill
2871             };
2872              
2873             sub ZA_Y2K_1
2874             {
2875 10     10 0 19 my($year,$label) = @_;
2876 10 50       25 if ($year == 1999) { return(1999,12,31); }
  0         0  
2877 10         36 else { return(); }
2878             }
2879             sub ZA_Y2K_2
2880             {
2881 10     10 0 16 my($year,$label) = @_;
2882 10 50       25 if ($year == 2000) { return(2000,1,2); }
  10         31  
2883 0         0 else { return(); }
2884             }
2885             sub ZA_Y2K_3
2886             {
2887 10     10 0 22 my($year,$label) = @_;
2888 10 50       20 if ($year == 2000) { return(2000,1,3); }
  10         32  
2889 0         0 else { return(); }
2890             }
2891             sub ZA_New_Year
2892             {
2893 10     10 0 19 my($year,$label) = @_;
2894 10         26 return( &Sunday_to_Monday($year,1,1) );
2895             }
2896             sub ZA_Human_Rights
2897             {
2898 10     10 0 21 my($year,$label) = @_;
2899 10         26 return( &Sunday_to_Monday($year,3,21) );
2900             }
2901             sub ZA_Freedom
2902             {
2903 10     10 0 16 my($year,$label) = @_;
2904 10         23 return( &Sunday_to_Monday($year,4,27) );
2905             }
2906             sub ZA_Workers
2907             {
2908 10     10 0 17 my($year,$label) = @_;
2909 10         29 return( &Sunday_to_Monday($year,5,1) );
2910             }
2911             sub ZA_Youth
2912             {
2913 10     10 0 26 my($year,$label) = @_;
2914 10         45 return( &Sunday_to_Monday($year,6,16) );
2915             }
2916             sub ZA_Women
2917             {
2918 10     10 0 37 my($year,$label) = @_;
2919 10         28 return( &Sunday_to_Monday($year,8,9) );
2920             }
2921             sub ZA_Heritage
2922             {
2923 10     10 0 19 my($year,$label) = @_;
2924 10         28 return( &Sunday_to_Monday($year,9,24) );
2925             }
2926             sub ZA_Reconciliation
2927             {
2928 10     10 0 19 my($year,$label) = @_;
2929 10         25 return( &Sunday_to_Monday($year,12,16) );
2930             }
2931             sub ZA_Christmas
2932             {
2933 10     10 0 19 my($year,$label) = @_;
2934 10         28 return( &Sunday_to_Monday($year,12,25) );
2935             }
2936             sub ZA_Goodwill
2937             {
2938 10     10 0 17 my($year,$label) = @_;
2939 10         24 return( &Sunday_to_Monday($year,12,26) );
2940             }
2941              
2942             $Profiles->{'ZA-WC'} = # Western Cape
2943             {
2944             %{$Profiles->{'ZA'}}
2945             };
2946             $Profiles->{'ZA-EC'} = # Eastern Cape
2947             {
2948             %{$Profiles->{'ZA'}}
2949             };
2950             $Profiles->{'ZA-NC'} = # Northern Cape
2951             {
2952             %{$Profiles->{'ZA'}}
2953             };
2954             $Profiles->{'ZA-FS'} = # Free State
2955             {
2956             %{$Profiles->{'ZA'}}
2957             };
2958             $Profiles->{'ZA-NW'} = # North West
2959             {
2960             %{$Profiles->{'ZA'}}
2961             };
2962             $Profiles->{'ZA-GA'} = # Gauteng
2963             {
2964             %{$Profiles->{'ZA'}}
2965             };
2966             $Profiles->{'ZA-NP'} = # Northern Province
2967             {
2968             %{$Profiles->{'ZA'}}
2969             };
2970             $Profiles->{'ZA-MP'} = # Mpumalanga
2971             {
2972             %{$Profiles->{'ZA'}}
2973             };
2974             $Profiles->{'ZA-KZN'} = # KwaZulu-Natal
2975             {
2976             %{$Profiles->{'ZA'}}
2977             };
2978              
2979             $Profiles->{'sdm'} = # software design & management AG
2980             {
2981             "Heiligabend" => ":24.12.",
2982             "Sylvester" => ":31.12."
2983             };
2984              
2985             $Profiles->{'sdm-MUC'} = { %{$Profiles->{'DE-BY'}}, %{$Profiles->{'sdm'}} };
2986             $Profiles->{'sdm-STG'} = { %{$Profiles->{'DE-BW'}}, %{$Profiles->{'sdm'}} };
2987             $Profiles->{'sdm-FFM'} = { %{$Profiles->{'DE-HE'}}, %{$Profiles->{'sdm'}} };
2988             $Profiles->{'sdm-BON'} = { %{$Profiles->{'DE-NW'}}, %{$Profiles->{'sdm'}} };
2989             $Profiles->{'sdm-CGN'} = { %{$Profiles->{'DE-NW'}}, %{$Profiles->{'sdm'}} };
2990             $Profiles->{'sdm-RAT'} = { %{$Profiles->{'DE-NW'}}, %{$Profiles->{'sdm'}} };
2991             $Profiles->{'sdm-HAN'} = { %{$Profiles->{'DE-NI'}}, %{$Profiles->{'sdm'}} };
2992             $Profiles->{'sdm-HH'} = { %{$Profiles->{'DE-HH'}}, %{$Profiles->{'sdm'}} };
2993             $Profiles->{'sdm-BLN'} = { %{$Profiles->{'DE-BE'}}, %{$Profiles->{'sdm'}} };
2994             $Profiles->{'sdm-DET'} = { %{$Profiles->{'US-MI'}}, %{$Profiles->{'sdm'}} };
2995             $Profiles->{'sdm-ZRH'} = { %{$Profiles->{'CH-DE'}}, %{$Profiles->{'sdm'}} };
2996              
2997             1;
2998              
2999             __END__