holidays 0.86__py3-none-any.whl → 0.88__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. holidays/calendars/chinese.py +44 -6
  2. holidays/calendars/hindu.py +85 -1
  3. holidays/constants.py +1 -0
  4. holidays/countries/american_samoa.py +2 -0
  5. holidays/countries/bangladesh.py +13 -9
  6. holidays/countries/belarus.py +4 -2
  7. holidays/countries/brazil.py +27 -1
  8. holidays/countries/chile.py +2 -3
  9. holidays/countries/germany.py +75 -74
  10. holidays/countries/guam.py +2 -0
  11. holidays/countries/india.py +5 -3
  12. holidays/countries/macau.py +39 -45
  13. holidays/countries/malaysia.py +171 -71
  14. holidays/countries/new_zealand.py +4 -3
  15. holidays/countries/northern_mariana_islands.py +2 -0
  16. holidays/countries/puerto_rico.py +4 -2
  17. holidays/countries/sweden.py +35 -11
  18. holidays/countries/taiwan.py +6 -5
  19. holidays/countries/turks_and_caicos_islands.py +13 -3
  20. holidays/countries/united_states.py +434 -133
  21. holidays/countries/united_states_minor_outlying_islands.py +2 -0
  22. holidays/countries/united_states_virgin_islands.py +2 -0
  23. holidays/countries/uzbekistan.py +12 -1
  24. holidays/countries/venezuela.py +113 -23
  25. holidays/financial/__init__.py +1 -0
  26. holidays/financial/bombay_stock_exchange.py +33 -0
  27. holidays/financial/national_stock_exchange_of_india.py +1 -1
  28. holidays/financial/ny_stock_exchange.py +591 -89
  29. holidays/groups/chinese.py +11 -18
  30. holidays/groups/hindu.py +24 -0
  31. holidays/holiday_base.py +2 -1
  32. holidays/locale/bn/LC_MESSAGES/BD.mo +0 -0
  33. holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
  34. holidays/locale/en_IN/LC_MESSAGES/XBOM.mo +0 -0
  35. holidays/locale/en_TC/LC_MESSAGES/TC.mo +0 -0
  36. holidays/locale/en_US/LC_MESSAGES/BD.mo +0 -0
  37. holidays/locale/en_US/LC_MESSAGES/BR.mo +0 -0
  38. holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
  39. holidays/locale/en_US/LC_MESSAGES/MY.mo +0 -0
  40. holidays/locale/en_US/LC_MESSAGES/SE.mo +0 -0
  41. holidays/locale/en_US/LC_MESSAGES/TC.mo +0 -0
  42. holidays/locale/en_US/LC_MESSAGES/US.mo +0 -0
  43. holidays/locale/en_US/LC_MESSAGES/VE.mo +0 -0
  44. holidays/locale/en_US/LC_MESSAGES/XBOM.mo +0 -0
  45. holidays/locale/es/LC_MESSAGES/VE.mo +0 -0
  46. holidays/locale/gu/LC_MESSAGES/IN.mo +0 -0
  47. holidays/locale/gu/LC_MESSAGES/XBOM.mo +0 -0
  48. holidays/locale/gu/LC_MESSAGES/XNSE.mo +0 -0
  49. holidays/locale/hi/LC_MESSAGES/XBOM.mo +0 -0
  50. holidays/locale/ms_MY/LC_MESSAGES/MY.mo +0 -0
  51. holidays/locale/pt_BR/LC_MESSAGES/BR.mo +0 -0
  52. holidays/locale/sv/LC_MESSAGES/SE.mo +0 -0
  53. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  54. holidays/locale/th/LC_MESSAGES/MY.mo +0 -0
  55. holidays/locale/th/LC_MESSAGES/SE.mo +0 -0
  56. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  57. holidays/locale/uk/LC_MESSAGES/BR.mo +0 -0
  58. holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
  59. holidays/locale/uk/LC_MESSAGES/SE.mo +0 -0
  60. holidays/locale/uk/LC_MESSAGES/VE.mo +0 -0
  61. holidays/registry.py +1 -0
  62. holidays/utils.py +62 -1
  63. holidays/version.py +3 -1
  64. {holidays-0.86.dist-info → holidays-0.88.dist-info}/METADATA +30 -16
  65. {holidays-0.86.dist-info → holidays-0.88.dist-info}/RECORD +69 -60
  66. {holidays-0.86.dist-info → holidays-0.88.dist-info}/licenses/CONTRIBUTORS +6 -0
  67. {holidays-0.86.dist-info → holidays-0.88.dist-info}/WHEEL +0 -0
  68. {holidays-0.86.dist-info → holidays-0.88.dist-info}/licenses/LICENSE +0 -0
  69. {holidays-0.86.dist-info → holidays-0.88.dist-info}/top_level.txt +0 -0
@@ -21,25 +21,39 @@ from holidays.holiday_base import HolidayBase
21
21
  class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
22
22
  """Germany holidays.
23
23
 
24
- This class doesn't return any holidays before 1990-10-03.
25
-
26
- Before that date the current Germany was separated into the "German Democratic
27
- Republic" and the "Federal Republic of Germany" which both had somewhat
28
- different holidays. Since this class is called "Germany" it doesn't really
29
- make sense to include the days from the two former countries.
30
-
31
- "Mariä Himmelfahrt" is only a holiday in Bavaria (BY) and "Fronleichnam"
32
- in Saxony (SN) and Thuringia (TH) if municipality is mostly catholic which
33
- in term depends on census data. It's listed in "CATHOLIC" category for these provinces.
34
-
35
24
  References:
25
+ * <https://de.wikipedia.org/wiki/Feiertag_(Deutschland)>
36
26
  * <https://en.wikipedia.org/wiki/Public_holidays_in_Germany>
37
- * [Bavaria's Feiertagsgesetz](https://web.archive.org/web/20250724092008/https://www.gesetze-bayern.de/Content/Document/BayFTG-1)
27
+ * [German Unity Day](https://web.archive.org/web/20251011161644/https://www.gesetze-im-internet.de/einigvtr/art_2.html)
28
+
29
+ Subdivisions Holidays References:
30
+ * [Brandenburg](https://web.archive.org/web/20251002092001/https://bravors.brandenburg.de/gesetze/ftg_2015)
31
+ * [Berlin](https://web.archive.org/web/20250518234750/http://gesetze.berlin.de/bsbe/document/jlr-FeiertGBEV10P1)
32
+ * [Baden-Württemberg](https://web.archive.org/web/20240914215438/https://www.landesrecht-bw.de/bsbw/document/jlr-FeiertGBWpP1)
33
+ * [Bayern](https://web.archive.org/web/20250906201237/https://www.gesetze-bayern.de/Content/Document/BayFTG/true)
34
+ * [Bremen](https://web.archive.org/web/20240430101614/https://www.transparenz.bremen.de/metainformationen/gesetz-ueber-die-sonn-gedenk-und-feiertage-vom-12-november-1954-145882)
35
+ * [Hessen](https://web.archive.org/web/20250421183249/http://www.rv.hessenrecht.hessen.de/bshe/document/jlr-FeiertGHE1952rahmen)
36
+ * [Hamburg](https://web.archive.org/web/20250618110249/https://www.landesrecht-hamburg.de/bsha/document/jlr-FeiertGHAV3P1)
37
+ * [Mecklenburg-Vorpommern](https://web.archive.org/web/20250222090126/https://www.landesrecht-mv.de/bsmv/document/jlr-FTGMVV3P2)
38
+ * [Niedersachsen](https://web.archive.org/web/20250627100126/https://voris.wolterskluwer-online.de/browse/document/b724111b-6c20-3862-b111-589842acacba)
39
+ * [Nordrhein-Westfalen](https://web.archive.org/web/20250717194916/https://recht.nrw.de/lmi/owa/br_bes_detail?bes_id=3367&aufgehoben=N&det_id=144445&anw_nr=2&menu=1&sg=0)
40
+ * [Rheinland-Pfalz](https://web.archive.org/web/20250521153233/http://www.landesrecht.rlp.de/bsrp/document/jlr-FeiertGRPpP2)
41
+ * [Schleswig-Holstein](https://web.archive.org/web/20250812223916/https://www.gesetze-rechtsprechung.sh.juris.de/bssh/document/jlr-FeiertGSH2004V3P2)
42
+ * [Saarland](https://web.archive.org/web/20250124112139/http://recht.saarland.de/bssl/document/jlr-FeiertGSL1976V6P2)
43
+ * [Sachsen](https://web.archive.org/web/20250808020452/https://www.revosax.sachsen.de/vorschrift/3997-SaechsSFG)
44
+ * [Sachsen-Anhalt](https://web.archive.org/web/20250615214949/http://www.landesrecht.sachsen-anhalt.de/bsst/document/jlr-FeiertGSTpP2)
45
+ * [Thüringen](https://web.archive.org/web/20250712163548/http://landesrecht.thueringen.de/bsth/document/jlr-FeiertGTHV5P2)
46
+
47
+ !!! note "Note"
48
+ "Mariä Himmelfahrt" is only a holiday in Bavaria (BY) and "Fronleichnam"
49
+ in Saxony (SN) and Thuringia (TH) if municipality is mostly catholic which
50
+ in term depends on census data. It's listed in "CATHOLIC" category for these provinces.
38
51
  """
39
52
 
40
53
  country = "DE"
41
54
  default_language = "de"
42
- start_year = 1990
55
+ # Germany reunification was completed on Oct 3, 1990.
56
+ start_year = 1991
43
57
  subdivisions = (
44
58
  # States.
45
59
  "BB", # Brandenburg.
@@ -90,24 +104,23 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
90
104
  super().__init__(*args, **kwargs)
91
105
 
92
106
  def _populate_public_holidays(self):
93
- if self._year >= 1991:
94
- # New Year's Day.
95
- self._add_new_years_day(tr("Neujahr"))
107
+ # New Year's Day.
108
+ self._add_new_years_day(tr("Neujahr"))
96
109
 
97
- # Good Friday.
98
- self._add_good_friday(tr("Karfreitag"))
110
+ # Good Friday.
111
+ self._add_good_friday(tr("Karfreitag"))
99
112
 
100
- # Easter Monday.
101
- self._add_easter_monday(tr("Ostermontag"))
113
+ # Easter Monday.
114
+ self._add_easter_monday(tr("Ostermontag"))
102
115
 
103
- # Labor Day.
104
- self._add_labor_day(tr("Erster Mai"))
116
+ # Labor Day.
117
+ self._add_labor_day(tr("Erster Mai"))
105
118
 
106
- # Ascension Day.
107
- self._add_ascension_thursday(tr("Christi Himmelfahrt"))
119
+ # Ascension Day.
120
+ self._add_ascension_thursday(tr("Christi Himmelfahrt"))
108
121
 
109
- # Whit Monday.
110
- self._add_whit_monday(tr("Pfingstmontag"))
122
+ # Whit Monday.
123
+ self._add_whit_monday(tr("Pfingstmontag"))
111
124
 
112
125
  # German Unity Day.
113
126
  self._add_holiday_oct_3(tr("Tag der Deutschen Einheit"))
@@ -126,47 +139,43 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
126
139
  self._populate_subdiv_by_public_holidays()
127
140
 
128
141
  def _populate_subdiv_bb_public_holidays(self):
129
- if self._year >= 1991:
130
- # Easter Sunday.
131
- self._add_easter_sunday(tr("Ostersonntag"))
142
+ # Easter Sunday.
143
+ self._add_easter_sunday(tr("Ostersonntag"))
132
144
 
133
- # Whit Sunday.
134
- self._add_whit_sunday(tr("Pfingstsonntag"))
145
+ # Whit Sunday.
146
+ self._add_whit_sunday(tr("Pfingstsonntag"))
135
147
 
136
148
  # Reformation Day.
137
149
  self._add_holiday_oct_31(tr("Reformationstag"))
138
150
 
139
151
  def _populate_subdiv_be_public_holidays(self):
140
152
  if self._year >= 2019:
141
- # International Women's Day.
142
- self._add_womens_day(tr("Internationaler Frauentag"))
153
+ # Women's Day.
154
+ self._add_womens_day(tr("Frauentag"))
143
155
 
144
156
  def _populate_subdiv_bw_public_holidays(self):
145
- if self._year >= 1991:
146
- # Epiphany.
147
- self._add_epiphany_day(tr("Heilige Drei Könige"))
157
+ # Epiphany.
158
+ self._add_epiphany_day(tr("Heilige Drei Könige"))
148
159
 
149
- # Corpus Christi.
150
- self._add_corpus_christi_day(tr("Fronleichnam"))
160
+ # Corpus Christi.
161
+ self._add_corpus_christi_day(tr("Fronleichnam"))
151
162
 
152
163
  # All Saints' Day.
153
164
  self._add_all_saints_day(tr("Allerheiligen"))
154
165
 
155
166
  def _populate_subdiv_by_public_holidays(self):
156
- if self._year >= 1991:
157
- # Epiphany.
158
- self._add_epiphany_day(tr("Heilige Drei Könige"))
167
+ # Epiphany.
168
+ self._add_epiphany_day(tr("Heilige Drei Könige"))
159
169
 
160
- # Corpus Christi.
161
- self._add_corpus_christi_day(tr("Fronleichnam"))
170
+ # Corpus Christi.
171
+ self._add_corpus_christi_day(tr("Fronleichnam"))
162
172
 
163
173
  # All Saints' Day.
164
174
  self._add_all_saints_day(tr("Allerheiligen"))
165
175
 
166
176
  def _populate_subdiv_by_catholic_holidays(self):
167
- if self._year >= 1991:
168
- # Assumption Day.
169
- self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
177
+ # Assumption Day.
178
+ self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
170
179
 
171
180
  def _populate_subdiv_hb_public_holidays(self):
172
181
  if self._year >= 2018:
@@ -174,9 +183,8 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
174
183
  self._add_holiday_oct_31(tr("Reformationstag"))
175
184
 
176
185
  def _populate_subdiv_he_public_holidays(self):
177
- if self._year >= 1991:
178
- # Corpus Christi.
179
- self._add_corpus_christi_day(tr("Fronleichnam"))
186
+ # Corpus Christi.
187
+ self._add_corpus_christi_day(tr("Fronleichnam"))
180
188
 
181
189
  def _populate_subdiv_hh_public_holidays(self):
182
190
  if self._year >= 2018:
@@ -185,8 +193,8 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
185
193
 
186
194
  def _populate_subdiv_mv_public_holidays(self):
187
195
  if self._year >= 2023:
188
- # International Women's Day.
189
- self._add_womens_day(tr("Internationaler Frauentag"))
196
+ # Women's Day.
197
+ self._add_womens_day(tr("Frauentag"))
190
198
 
191
199
  # Reformation Day.
192
200
  self._add_holiday_oct_31(tr("Reformationstag"))
@@ -197,17 +205,15 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
197
205
  self._add_holiday_oct_31(tr("Reformationstag"))
198
206
 
199
207
  def _populate_subdiv_nw_public_holidays(self):
200
- if self._year >= 1991:
201
- # Corpus Christi.
202
- self._add_corpus_christi_day(tr("Fronleichnam"))
208
+ # Corpus Christi.
209
+ self._add_corpus_christi_day(tr("Fronleichnam"))
203
210
 
204
211
  # All Saints' Day.
205
212
  self._add_all_saints_day(tr("Allerheiligen"))
206
213
 
207
214
  def _populate_subdiv_rp_public_holidays(self):
208
- if self._year >= 1991:
209
- # Corpus Christi.
210
- self._add_corpus_christi_day(tr("Fronleichnam"))
215
+ # Corpus Christi.
216
+ self._add_corpus_christi_day(tr("Fronleichnam"))
211
217
 
212
218
  # All Saints' Day.
213
219
  self._add_all_saints_day(tr("Allerheiligen"))
@@ -218,12 +224,11 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
218
224
  self._add_holiday_oct_31(tr("Reformationstag"))
219
225
 
220
226
  def _populate_subdiv_sl_public_holidays(self):
221
- if self._year >= 1991:
222
- # Corpus Christi.
223
- self._add_corpus_christi_day(tr("Fronleichnam"))
227
+ # Corpus Christi.
228
+ self._add_corpus_christi_day(tr("Fronleichnam"))
224
229
 
225
- # Assumption Day.
226
- self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
230
+ # Assumption Day.
231
+ self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
227
232
 
228
233
  # All Saints' Day.
229
234
  self._add_all_saints_day(tr("Allerheiligen"))
@@ -237,14 +242,12 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
237
242
  self._add_holiday_1st_wed_before_nov_22(tr("Buß- und Bettag"))
238
243
 
239
244
  def _populate_subdiv_sn_catholic_holidays(self):
240
- if self._year >= 1991:
241
- # Corpus Christi.
242
- self._add_corpus_christi_day(tr("Fronleichnam"))
245
+ # Corpus Christi.
246
+ self._add_corpus_christi_day(tr("Fronleichnam"))
243
247
 
244
248
  def _populate_subdiv_st_public_holidays(self):
245
- if self._year >= 1991:
246
- # Epiphany.
247
- self._add_epiphany_day(tr("Heilige Drei Könige"))
249
+ # Epiphany.
250
+ self._add_epiphany_day(tr("Heilige Drei Könige"))
248
251
 
249
252
  # Reformation Day.
250
253
  self._add_holiday_oct_31(tr("Reformationstag"))
@@ -258,16 +261,14 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
258
261
  self._add_holiday_oct_31(tr("Reformationstag"))
259
262
 
260
263
  def _populate_subdiv_th_catholic_holidays(self):
261
- if self._year >= 1991:
262
- # Corpus Christi.
263
- self._add_corpus_christi_day(tr("Fronleichnam"))
264
+ # Corpus Christi.
265
+ self._add_corpus_christi_day(tr("Fronleichnam"))
264
266
 
265
267
  def _populate_subdiv_augsburg_public_holidays(self):
266
268
  self._populate_subdiv_by_public_holidays()
267
269
 
268
- if self._year >= 1991:
269
- # Augsburg Peace Festival.
270
- self._add_holiday_aug_8(tr("Augsburger Hohes Friedensfest"))
270
+ # Augsburg Peace Festival.
271
+ self._add_holiday_aug_8(tr("Augsburger Hohes Friedensfest"))
271
272
 
272
273
 
273
274
  class DE(Germany):
@@ -10,6 +10,7 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from holidays.constants import PUBLIC, UNOFFICIAL
13
14
  from holidays.countries.united_states import UnitedStates
14
15
  from holidays.mixins.child_entity import ChildEntity
15
16
 
@@ -25,6 +26,7 @@ class Guam(ChildEntity, UnitedStates):
25
26
  parent_entity = UnitedStates
26
27
  # Became a U.S. Territory on April 11th, 1899.
27
28
  start_year = 1900
29
+ supported_categories = (PUBLIC, UNOFFICIAL)
28
30
 
29
31
 
30
32
  class HolidaysGU(Guam):
@@ -37,6 +37,8 @@ class India(
37
37
  * <https://web.archive.org/web/20250413193633/https://www.calendarlabs.com/holidays/india/2021>
38
38
  * <https://web.archive.org/web/20231118175007/http://slusi.dacnet.nic.in/watershedatlas/list_of_state_abbreviation.htm>
39
39
  * <https://web.archive.org/web/20231008063930/https://vahan.parivahan.gov.in/vahan4dashboard/>
40
+ * Gujarat:
41
+ * <https://gad.gujarat.gov.in/personnel/Images/pdf/general_holidays_2026_guj.pdf>
40
42
  * Tamil Nadu:
41
43
  * [Tamil Monthly Calendar](https://web.archive.org/web/20231228103352/https://www.tamildailycalendar.com/tamil_monthly_calendar.php)
42
44
  * [Tamil Calendar](https://web.archive.org/web/20250429125140/https://www.prokerala.com/general/calendar/tamilcalendar.php)
@@ -144,7 +146,7 @@ class India(
144
146
  "West Bengal": "WB",
145
147
  }
146
148
  supported_categories = (OPTIONAL, PUBLIC)
147
- supported_languages = ("en_IN", "en_US", "hi")
149
+ supported_languages = ("en_IN", "en_US", "gu", "hi")
148
150
  _deprecated_subdivisions = (
149
151
  "DD", # Daman and Diu.
150
152
  "OR", # Orissa.
@@ -456,7 +458,7 @@ class India(
456
458
  # Dr. B. R. Ambedkar Jayanti.
457
459
  self._add_holiday_apr_14(tr("Dr. B. R. Ambedkar's Jayanti"))
458
460
  # Maharana Pratap Jayanti.
459
- self._add_holiday_jun_15(tr("Maharana Pratap Jayanti"))
461
+ self._add_maharana_pratap_jayanti(tr("Maharana Pratap Jayanti"))
460
462
 
461
463
  # Sikkim.
462
464
  def _populate_subdiv_sk_public_holidays(self):
@@ -485,7 +487,7 @@ class India(
485
487
  # Telangana Formation Day.
486
488
  self._add_holiday_jun_2(tr("Telangana Formation Day"))
487
489
  # Bathukamma Festival.
488
- self._add_holiday_oct_6(tr("Bathukamma Festival"))
490
+ self._add_bathukamma(tr("Bathukamma Festival"))
489
491
  # Ugadi.
490
492
  self._add_gudi_padwa(tr("Ugadi"))
491
493
 
@@ -24,6 +24,8 @@ from holidays.observed_holiday_base import (
24
24
  ObservedHolidayBase,
25
25
  SUN_TO_NEXT_WORKDAY,
26
26
  SAT_SUN_TO_NEXT_WORKDAY,
27
+ SAT_TO_NONE,
28
+ SUN_TO_NONE,
27
29
  )
28
30
 
29
31
 
@@ -92,19 +94,7 @@ class Macau(
92
94
  kwargs.setdefault("observed_since", 2011)
93
95
  super().__init__(*args, **kwargs)
94
96
 
95
- def _populate_public_holidays(self):
96
- """Macau Mandatory (Statutory) Holidays.
97
-
98
- Decreto-Lei n.º 101/84/M - Earliest Available Version Online.
99
- Decreto-Lei n.º 24/89/M - Added Ching Ming Festival.
100
- Lei n.º 8/2000 - Removed Day of Portugal
101
- - Added Macao S.A.R. Establishment Day.
102
- - Moved Mid-Autumn to Day following Mid-Autumn to match Public Holidays.
103
- Lei n.º 7/2008 - Consolidated with other laws, reaffirming 2000 Amendment list.
104
- """
105
- if self._year <= 1984:
106
- return None
107
-
97
+ def _populate_common(self):
108
98
  # New Year's Day.
109
99
  self._add_new_years_day(tr("元旦"))
110
100
 
@@ -126,6 +116,21 @@ class Macau(
126
116
  # National Day of the People's Republic of China.
127
117
  self._add_holiday_oct_1(tr("中華人民共和國國慶日"))
128
118
 
119
+ def _populate_public_holidays(self):
120
+ """Macau Mandatory (Statutory) Holidays.
121
+
122
+ Decreto-Lei n.º 101/84/M - Earliest Available Version Online.
123
+ Decreto-Lei n.º 24/89/M - Added Ching Ming Festival.
124
+ Lei n.º 8/2000 - Removed Day of Portugal
125
+ - Added Macao S.A.R. Establishment Day.
126
+ - Moved Mid-Autumn to Day following Mid-Autumn to match Public Holidays.
127
+ Lei n.º 7/2008 - Consolidated with other laws, reaffirming 2000 Amendment list.
128
+ """
129
+ if self._year <= 1984:
130
+ return None
131
+
132
+ self._populate_common()
133
+
129
134
  # Decreto-Lei n.º 24/89/M - Adds Ching Ming as a Mandatory Holiday.
130
135
  if self._year >= 1989:
131
136
  # Tomb-Sweeping Day.
@@ -150,17 +155,7 @@ class Macau(
150
155
 
151
156
  def _populate_optional_holidays(self):
152
157
  """Macau General Holidays."""
153
- # New Year's Day.
154
- self._add_new_years_day(tr("元旦"))
155
-
156
- # Chinese New Year's Day.
157
- self._add_chinese_new_years_day(tr("農曆正月初一"))
158
-
159
- # The second day of Chinese New Year.
160
- self._add_chinese_new_years_day_two(tr("農曆正月初二"))
161
-
162
- # The third day of Chinese New Year.
163
- self._add_chinese_new_years_day_three(tr("農曆正月初三"))
158
+ self._populate_common()
164
159
 
165
160
  # Tomb-Sweeping Day.
166
161
  self._add_qingming_festival(tr("清明節"))
@@ -183,21 +178,12 @@ class Macau(
183
178
  else tr("聖周星期六")
184
179
  )
185
180
 
186
- # Labor Day.
187
- self._add_labor_day(tr("勞動節"))
188
-
189
181
  # Dragon Boat Festival.
190
182
  self._add_dragon_boat_festival(tr("端午節"))
191
183
 
192
- # Double Ninth Festival.
193
- self._add_double_ninth_festival(tr("重陽節"))
194
-
195
184
  # The Day following Mid-Autumn Festival.
196
185
  self._add_mid_autumn_festival_day_two(tr("中秋節翌日"))
197
186
 
198
- # National Day of the People's Republic of China.
199
- self._add_holiday_oct_1(tr("中華人民共和國國慶日"))
200
-
201
187
  # All Soul's Day.
202
188
  self._add_all_souls_day(tr("追思節"))
203
189
 
@@ -293,18 +279,12 @@ class Macau(
293
279
  # New Year's Day.
294
280
  dts_observed.add(self._add_new_years_day(tr("元旦")))
295
281
 
296
- if self._year not in {2006, 2007, 2009, 2010, 2012, 2013, 2016, 2023}:
282
+ if not (
283
+ self._is_sunday(self._chinese_new_year) or self._is_monday(self._chinese_new_year)
284
+ ):
297
285
  # Chinese New Year's Eve.
298
286
  self._add_chinese_new_years_eve(begin_time_label % self.tr("農曆除夕"))
299
287
 
300
- if self._year in {2006, 2007, 2010, 2013, 2014, 2017, 2018}:
301
- # The fourth day of Chinese New Year.
302
- self._add_chinese_new_years_day_four(tr("農曆正月初四"))
303
-
304
- if self._year in {2014, 2015, 2017, 2018}:
305
- # The fifth day of Chinese New Year.
306
- self._add_chinese_new_years_day_five(tr("農曆正月初五"))
307
-
308
288
  if self._year >= 2019:
309
289
  # Chinese New Year's Day.
310
290
  dts_observed.add(self._add_chinese_new_years_day(tr("農曆正月初一")))
@@ -314,6 +294,17 @@ class Macau(
314
294
 
315
295
  # The third day of Chinese New Year.
316
296
  dts_observed.add(self._add_chinese_new_years_day_three(tr("農曆正月初三")))
297
+ else:
298
+ if self._is_friday(self._chinese_new_year) or self._is_weekend(self._chinese_new_year):
299
+ # The fourth day of Chinese New Year.
300
+ self._add_chinese_new_years_day_four(tr("農曆正月初四"))
301
+ if self._year >= 2012 and (
302
+ self._is_thursday(self._chinese_new_year)
303
+ or self._is_friday(self._chinese_new_year)
304
+ or self._is_saturday(self._chinese_new_year)
305
+ ):
306
+ # The fifth day of Chinese New Year.
307
+ self._add_chinese_new_years_day_five(tr("農曆正月初五"))
317
308
 
318
309
  # The Day before Easter.
319
310
  dts_observed.add(self._add_holy_saturday(tr("復活節前日")))
@@ -361,9 +352,12 @@ class Macau(
361
352
  dts_observed.add(self._add_christmas_day(tr("聖誕節")))
362
353
 
363
354
  # 2012's Full-Day New Year's Eve is declared discretely.
364
- if self._year >= 2007 and self._year not in {2011, 2012, 2016, 2017, 2022, 2023}:
365
- # New Year's Eve.
366
- self._add_new_years_eve(begin_time_label % self.tr("除夕"))
355
+ if self._year >= 2007 and self._year != 2012:
356
+ self._move_holiday(
357
+ # New Year's Eve.
358
+ self._add_new_years_eve(begin_time_label % self.tr("除夕")),
359
+ rule=SAT_TO_NONE + SUN_TO_NONE,
360
+ )
367
361
 
368
362
  if self.observed:
369
363
  self.observed_label = (