holidays 0.60__py3-none-any.whl → 0.62__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 (156) hide show
  1. holidays/constants.py +3 -0
  2. holidays/countries/__init__.py +1 -0
  3. holidays/countries/albania.py +2 -4
  4. holidays/countries/angola.py +2 -4
  5. holidays/countries/argentina.py +23 -1
  6. holidays/countries/armenia.py +1 -3
  7. holidays/countries/aruba.py +2 -4
  8. holidays/countries/australia.py +1 -0
  9. holidays/countries/azerbaijan.py +31 -8
  10. holidays/countries/bahamas.py +2 -4
  11. holidays/countries/barbados.py +2 -4
  12. holidays/countries/belarus.py +2 -4
  13. holidays/countries/belize.py +2 -4
  14. holidays/countries/bolivia.py +1 -3
  15. holidays/countries/botswana.py +1 -3
  16. holidays/countries/brazil.py +151 -116
  17. holidays/countries/brunei.py +159 -72
  18. holidays/countries/bulgaria.py +1 -6
  19. holidays/countries/burkina_faso.py +3 -5
  20. holidays/countries/burundi.py +1 -3
  21. holidays/countries/cambodia.py +13 -4
  22. holidays/countries/cameroon.py +2 -4
  23. holidays/countries/canada.py +7 -11
  24. holidays/countries/chad.py +2 -4
  25. holidays/countries/chile.py +1 -3
  26. holidays/countries/china.py +23 -12
  27. holidays/countries/congo.py +2 -4
  28. holidays/countries/croatia.py +1 -3
  29. holidays/countries/cuba.py +2 -4
  30. holidays/countries/curacao.py +2 -7
  31. holidays/countries/cyprus.py +1 -9
  32. holidays/countries/djibouti.py +2 -4
  33. holidays/countries/dominica.py +2 -4
  34. holidays/countries/dominican_republic.py +2 -4
  35. holidays/countries/eswatini.py +1 -4
  36. holidays/countries/ethiopia.py +1 -3
  37. holidays/countries/finland.py +6 -3
  38. holidays/countries/france.py +1 -0
  39. holidays/countries/gabon.py +2 -4
  40. holidays/countries/georgia.py +1 -3
  41. holidays/countries/germany.py +4 -56
  42. holidays/countries/ghana.py +1 -4
  43. holidays/countries/guernsey.py +328 -0
  44. holidays/countries/haiti.py +2 -8
  45. holidays/countries/hongkong.py +2 -3
  46. holidays/countries/indonesia.py +1 -3
  47. holidays/countries/iran.py +1 -3
  48. holidays/countries/ireland.py +1 -3
  49. holidays/countries/israel.py +1 -18
  50. holidays/countries/japan.py +2 -6
  51. holidays/countries/jersey.py +2 -4
  52. holidays/countries/kazakhstan.py +2 -4
  53. holidays/countries/kenya.py +1 -3
  54. holidays/countries/laos.py +2 -13
  55. holidays/countries/latvia.py +1 -3
  56. holidays/countries/lesotho.py +1 -3
  57. holidays/countries/lithuania.py +1 -3
  58. holidays/countries/luxembourg.py +1 -1
  59. holidays/countries/madagascar.py +1 -4
  60. holidays/countries/malawi.py +1 -4
  61. holidays/countries/malaysia.py +1 -6
  62. holidays/countries/malta.py +2 -4
  63. holidays/countries/moldova.py +2 -4
  64. holidays/countries/mozambique.py +1 -3
  65. holidays/countries/namibia.py +1 -3
  66. holidays/countries/netherlands.py +1 -0
  67. holidays/countries/new_zealand.py +1 -3
  68. holidays/countries/nigeria.py +1 -3
  69. holidays/countries/pakistan.py +1 -3
  70. holidays/countries/palau.py +5 -7
  71. holidays/countries/papua_new_guinea.py +2 -4
  72. holidays/countries/paraguay.py +32 -31
  73. holidays/countries/philippines.py +1 -3
  74. holidays/countries/poland.py +1 -3
  75. holidays/countries/portugal.py +23 -0
  76. holidays/countries/russia.py +1 -3
  77. holidays/countries/saint_kitts_and_nevis.py +2 -4
  78. holidays/countries/seychelles.py +2 -4
  79. holidays/countries/slovakia.py +2 -4
  80. holidays/countries/slovenia.py +1 -3
  81. holidays/countries/south_africa.py +2 -4
  82. holidays/countries/south_korea.py +1 -6
  83. holidays/countries/switzerland.py +2 -1
  84. holidays/countries/taiwan.py +1 -3
  85. holidays/countries/tanzania.py +2 -8
  86. holidays/countries/thailand.py +12 -8
  87. holidays/countries/timor_leste.py +4 -8
  88. holidays/countries/tonga.py +2 -4
  89. holidays/countries/turkey.py +2 -7
  90. holidays/countries/ukraine.py +2 -4
  91. holidays/countries/united_kingdom.py +2 -8
  92. holidays/countries/united_states.py +20 -23
  93. holidays/countries/uruguay.py +2 -7
  94. holidays/countries/uzbekistan.py +1 -2
  95. holidays/countries/vanuatu.py +2 -4
  96. holidays/countries/vatican_city.py +1 -3
  97. holidays/countries/venezuela.py +1 -0
  98. holidays/countries/zambia.py +1 -4
  99. holidays/countries/zimbabwe.py +1 -3
  100. holidays/financial/__init__.py +1 -0
  101. holidays/financial/brasil_bolsa_balcao.py +108 -0
  102. holidays/financial/european_central_bank.py +2 -5
  103. holidays/financial/ice_futures_europe.py +2 -5
  104. holidays/financial/ny_stock_exchange.py +20 -21
  105. holidays/groups/international.py +11 -0
  106. holidays/helpers.py +4 -4
  107. holidays/holiday_base.py +10 -4
  108. holidays/locale/de/LC_MESSAGES/CH.po +1 -1
  109. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  110. holidays/locale/en_US/LC_MESSAGES/BN.po +29 -18
  111. holidays/locale/en_US/LC_MESSAGES/BR.mo +0 -0
  112. holidays/locale/en_US/LC_MESSAGES/BR.po +263 -0
  113. holidays/locale/en_US/LC_MESSAGES/BVMF.mo +0 -0
  114. holidays/locale/en_US/LC_MESSAGES/BVMF.po +79 -0
  115. holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
  116. holidays/locale/en_US/LC_MESSAGES/CH.po +1 -1
  117. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  118. holidays/locale/en_US/LC_MESSAGES/KH.po +7 -3
  119. holidays/locale/en_US/LC_MESSAGES/PY.mo +0 -0
  120. holidays/locale/en_US/LC_MESSAGES/PY.po +18 -14
  121. holidays/locale/es/LC_MESSAGES/PY.mo +0 -0
  122. holidays/locale/es/LC_MESSAGES/PY.po +17 -13
  123. holidays/locale/fr/LC_MESSAGES/CH.mo +0 -0
  124. holidays/locale/fr/LC_MESSAGES/CH.po +1 -1
  125. holidays/locale/it/LC_MESSAGES/CH.mo +0 -0
  126. holidays/locale/it/LC_MESSAGES/CH.po +1 -1
  127. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  128. holidays/locale/km/LC_MESSAGES/KH.po +7 -3
  129. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  130. holidays/locale/ms/LC_MESSAGES/BN.po +26 -17
  131. holidays/locale/pt_BR/LC_MESSAGES/BR.mo +0 -0
  132. holidays/locale/pt_BR/LC_MESSAGES/BR.po +263 -0
  133. holidays/locale/pt_BR/LC_MESSAGES/BVMF.mo +0 -0
  134. holidays/locale/pt_BR/LC_MESSAGES/BVMF.po +79 -0
  135. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  136. holidays/locale/th/LC_MESSAGES/BN.po +28 -17
  137. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  138. holidays/locale/th/LC_MESSAGES/KH.po +7 -3
  139. holidays/locale/uk/LC_MESSAGES/BR.mo +0 -0
  140. holidays/locale/uk/LC_MESSAGES/BR.po +263 -0
  141. holidays/locale/uk/LC_MESSAGES/BVMF.mo +0 -0
  142. holidays/locale/uk/LC_MESSAGES/BVMF.po +79 -0
  143. holidays/locale/uk/LC_MESSAGES/CH.mo +0 -0
  144. holidays/locale/uk/LC_MESSAGES/CH.po +1 -1
  145. holidays/locale/uk/LC_MESSAGES/PY.mo +0 -0
  146. holidays/locale/uk/LC_MESSAGES/PY.po +18 -14
  147. holidays/observed_holiday_base.py +2 -1
  148. holidays/registry.py +2 -0
  149. holidays/utils.py +1 -1
  150. holidays/version.py +1 -1
  151. {holidays-0.60.dist-info → holidays-0.62.dist-info}/AUTHORS +1 -0
  152. {holidays-0.60.dist-info → holidays-0.62.dist-info}/METADATA +20 -7
  153. {holidays-0.60.dist-info → holidays-0.62.dist-info}/RECORD +156 -142
  154. {holidays-0.60.dist-info → holidays-0.62.dist-info}/WHEEL +1 -1
  155. {holidays-0.60.dist-info → holidays-0.62.dist-info}/LICENSE +0 -0
  156. {holidays-0.60.dist-info → holidays-0.62.dist-info}/top_level.txt +0 -0
@@ -61,6 +61,42 @@ class Brunei(
61
61
 
62
62
  - Based on: http://www.labour.gov.bn/Lists/Upcomming%20events/AllItems.aspx
63
63
  http://www.labour.gov.bn/Download/GUIDE%20TO%20BRUNEI%20EMPLOYMENT%20LAWS%20-%20english%20version-3.pdf
64
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk12-1997.pdf
65
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk14-1998.pdf
66
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk15-1998.pdf
67
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk14-1999.pdf
68
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk05-2000.pdf
69
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2000.pdf
70
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk13-2000.pdf
71
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk07-2001.pdf
72
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk11-2002.pdf
73
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk02-2003.pdf
74
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk09-2004.pdf
75
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk11-2005.pdf
76
+ https://www.pmo.gov.bn/Circulars%20PDF%20Library/jpmsk12-2005.pdf
77
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk03-2006.pdf
78
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk17-2006.pdf
79
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2007.pdf
80
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk09-2008.pdf
81
+ https://chittychat.wordpress.com/wp-content/uploads/2008/11/school_terms_20091.pdf
82
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk08-2009.pdf
83
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk09-2010.pdf
84
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2011.pdf
85
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk08-2012.pdf
86
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2012.pdf
87
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk07-2013.pdf
88
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk09-14.pdf
89
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk11-2015.pdf
90
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk09-2016.pdf
91
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk07-2017.pdf
92
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk08-2017.pdf
93
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk11-2018.pdf
94
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk06-2019.pdf
95
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2020.pdf
96
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk10-2021.pdf
97
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk04-2022.pdf
98
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk04-2023.pdf
99
+ https://www.jpm.gov.bn/Circulars%20PDF%20Library/jpmsk06-2024.pdf
64
100
  - Checked with: https://asean.org/wp-content/uploads/2021/12/ASEAN-National-Holidays-2022.pdf
65
101
  https://asean.org/wp-content/uploads/2022/12/ASEAN-Public-Holidays-2023.pdf
66
102
  https://www.timeanddate.com/holidays/brunei/
@@ -91,6 +127,8 @@ class Brunei(
91
127
  observed_estimated_label = tr("%s (diperhatikan, anggaran)")
92
128
  supported_languages = ("en_US", "ms", "th")
93
129
  weekend = {FRI, SUN}
130
+ # Available post-Independence from 1984 afterwards
131
+ start_year = 1984
94
132
 
95
133
  def __init__(self, *args, **kwargs):
96
134
  ChineseCalendarHolidays.__init__(self)
@@ -102,27 +140,23 @@ class Brunei(
102
140
  super().__init__(*args, **kwargs)
103
141
 
104
142
  def _populate_public_holidays(self):
105
- # Available post-Independence from 1984 afterwards
106
- if self._year <= 1983:
107
- return None
108
-
109
143
  # Awal Tahun Masihi
110
144
  # Status: In-Use.
111
145
 
112
- # New Year's Day
146
+ # New Year's Day.
113
147
  self._add_observed(self._add_new_years_day(tr("Awal Tahun Masihi")))
114
148
 
115
149
  # Tahun Baru Cina
116
150
  # Status: In-Use.
117
151
 
118
- # Lunar New Year
152
+ # Lunar New Year.
119
153
  self._add_observed(self._add_chinese_new_years_day(tr("Tahun Baru Cina")))
120
154
 
121
155
  # Hari Kebangsaan
122
156
  # Status: In-Use.
123
157
  # Starts in 1984.
124
158
 
125
- # National Day
159
+ # National Day.
126
160
  self._add_observed(self._add_holiday_feb_23(tr("Hari Kebangsaan")))
127
161
 
128
162
  # Hari Angkatan Bersenjata Diraja Brunei
@@ -131,7 +165,7 @@ class Brunei(
131
165
  # Commemorates the formation of Royal Brunei Malay Regiment in 1961.
132
166
 
133
167
  self._add_observed(
134
- # Armed Forces Day
168
+ # Armed Forces Day.
135
169
  self._add_holiday_may_31(tr("Hari Angkatan Bersenjata Diraja Brunei"))
136
170
  )
137
171
 
@@ -140,14 +174,14 @@ class Brunei(
140
174
  # Started in 1968.
141
175
 
142
176
  self._add_observed(
143
- # Sultan Hassanal Bolkiah's Birthday
177
+ # Sultan Hassanal Bolkiah's Birthday.
144
178
  self._add_holiday_jul_15(tr("Hari Keputeraan KDYMM Sultan Brunei"))
145
179
  )
146
180
 
147
181
  # Hari Natal
148
182
  # Status: In-Use.
149
183
 
150
- # Christmas Day
184
+ # Christmas Day.
151
185
  self._add_observed(self._add_christmas_day(tr("Hari Natal")))
152
186
 
153
187
  # Islamic Holidays are placed after Gregorian holidays to prevent
@@ -156,61 +190,75 @@ class Brunei(
156
190
  # Israk dan Mikraj
157
191
  # Status: In-Use.
158
192
 
159
- # Isra' and Mi'raj
193
+ # Isra' and Mi'raj.
160
194
  for dt in self._add_isra_and_miraj_day(tr("Israk dan Mikraj")):
161
195
  self._add_observed(dt)
162
196
 
163
197
  # Hari Pertama Berpuasa
164
198
  # Status: In-Use.
165
199
 
166
- # First Day of Ramadan
200
+ # First Day of Ramadan.
167
201
  for dt in self._add_ramadan_beginning_day(tr("Hari Pertama Berpuasa")):
168
202
  self._add_observed(dt)
169
203
 
170
204
  # Hari Nuzul Al-Quran
171
205
  # Status: In-Use.
172
206
 
173
- # Anniversary of the revelation of the Quran
207
+ # Anniversary of the revelation of the Quran.
174
208
  for dt in self._add_nuzul_al_quran_day(tr("Hari Nuzul Al-Quran")):
175
209
  self._add_observed(dt)
176
210
 
177
211
  # Hari Raya Aidil Fitri
178
212
  # Status: In-Use.
179
213
  # This is celebrate for three days in Brunei.
180
- # Observed as 'Hari Raya Puasa' and only for 2 days at certain point.
181
214
  # 1: If Wed-Thu-Fri -> Sat (3rd Day +1)
182
215
  # 2: If Thu-Fri-Sat -> Mon (2nd Day +3)
183
- # 3: If Fri-Sat-Sun -> Mon (1st Day +3)
216
+ # 3: If Fri-Sat-Sun -> Mon, Tue (1st Day +3, 3rd day +2)
184
217
  # 4: If Sat-Sun-Mon -> Tue (2nd Day +2)
185
218
  # 5: If Sun-Mon-Tue -> Wed (1st Day +3)
186
-
187
- # Eid al-Fitr
219
+ # Observed as 'Hari Raya Puasa' and only for 2 days prior to 2012.
220
+ # 1: If Thu-Fri -> Sat (2nd Day +1)
221
+ # 2: If Fri-Sat -> Mon (1nd Day +2)
222
+ # 3: If Sat-Sun -> Mon (2nd Day +1)
223
+ # 4: If Sun-Mon -> Tue (1st Day +2)
224
+ # This was only observed for a single day in 2000.
225
+
226
+ # Eid al-Fitr.
188
227
  name = tr("Hari Raya Aidil Fitri")
189
- for dt in self._add_eid_al_fitr_day(name):
190
- self._add_observed(dt, rule=FRI_TO_NEXT_MON + SUN_TO_NEXT_WED)
191
- for dt in self._add_eid_al_fitr_day_two(name):
192
- self._add_observed(dt, rule=FRI_TO_NEXT_MON + SUN_TO_NEXT_TUE)
193
- for dt in self._add_eid_al_fitr_day_three(name):
194
- self._add_observed(dt, rule=FRI_TO_NEXT_SAT)
228
+ if self._year >= 2012:
229
+ for dt in self._add_eid_al_fitr_day(name):
230
+ self._add_observed(dt, rule=FRI_TO_NEXT_MON + SUN_TO_NEXT_WED)
231
+ for dt in self._add_eid_al_fitr_day_two(name):
232
+ self._add_observed(dt, rule=FRI_TO_NEXT_MON + SUN_TO_NEXT_TUE)
233
+ for dt in self._add_eid_al_fitr_day_three(name):
234
+ self._add_observed(dt, rule=FRI_TO_NEXT_SAT + SUN_TO_NEXT_TUE)
235
+ elif self._year == 2000:
236
+ for dt in self._add_eid_al_fitr_day(name):
237
+ self._add_observed(dt)
238
+ else:
239
+ for dt in self._add_eid_al_fitr_day(name):
240
+ self._add_observed(dt, rule=FRI_TO_NEXT_MON + SUN_TO_NEXT_TUE)
241
+ for dt in self._add_eid_al_fitr_day_two(name):
242
+ self._add_observed(dt)
195
243
 
196
244
  # Hari Raya Aidil Adha
197
245
  # Status: In-Use.
198
246
 
199
- # Eid al-Adha
247
+ # Eid al-Adha.
200
248
  for dt in self._add_eid_al_adha_day(tr("Hari Raya Aidil Adha")):
201
249
  self._add_observed(dt)
202
250
 
203
251
  # Awal Tahun Hijrah
204
252
  # Status: In-Use.
205
253
 
206
- # Islamic New Year
254
+ # Islamic New Year.
207
255
  for dt in self._add_islamic_new_year_day(tr("Awal Tahun Hijrah")):
208
256
  self._add_observed(dt)
209
257
 
210
258
  # Maulidur Rasul
211
259
  # Status: In-Use.
212
260
 
213
- # Prophet's Birthday
261
+ # Prophet's Birthday.
214
262
  for dt in self._add_mawlid_day(tr("Maulidur Rasul")):
215
263
  self._add_observed(dt)
216
264
 
@@ -225,101 +273,112 @@ class BRN(Brunei):
225
273
 
226
274
  class BruneiIslamicHolidays(_CustomIslamicHolidays):
227
275
  EID_AL_ADHA_DATES = {
228
- 2000: (MAR, 16),
276
+ 1998: (APR, 7),
277
+ 1999: (MAR, 28),
278
+ 2000: (MAR, 17),
229
279
  2001: (MAR, 6),
230
280
  2002: (FEB, 23),
231
281
  2003: (FEB, 12),
232
282
  2004: (FEB, 2),
233
283
  2005: (JAN, 21),
234
- 2006: ((JAN, 10), (DEC, 31)),
284
+ 2006: ((JAN, 11), (DEC, 31)),
235
285
  2007: (DEC, 20),
236
- 2008: (DEC, 9),
237
- 2009: (NOV, 28),
238
- 2010: (NOV, 17),
239
- 2011: (NOV, 7),
286
+ 2008: (DEC, 8),
287
+ 2009: (NOV, 27),
288
+ 2010: (NOV, 16),
289
+ 2011: (NOV, 6),
240
290
  2012: (OCT, 26),
241
291
  2013: (OCT, 15),
242
292
  2014: (OCT, 5),
243
293
  2015: (SEP, 24),
244
- 2016: (SEP, 13),
245
- 2017: (SEP, 2),
294
+ 2016: (SEP, 12),
295
+ 2017: (SEP, 1),
246
296
  2018: (AUG, 22),
247
297
  2019: (AUG, 11),
248
- 2020: (AUG, 1),
298
+ 2020: (JUL, 31),
249
299
  2021: (JUL, 20),
250
- 2022: (JUL, 10),
300
+ 2022: (JUL, 9),
251
301
  2023: (JUN, 29),
252
302
  2024: (JUN, 17),
303
+ 2025: (JUN, 7),
253
304
  }
254
305
 
255
306
  EID_AL_FITR_DATES = {
256
- 2000: ((JAN, 8), (DEC, 28)),
257
- 2001: (DEC, 17),
307
+ 1998: (JAN, 30),
308
+ 1999: (JAN, 19),
309
+ 2000: ((JAN, 8), (DEC, 27)),
310
+ 2001: (DEC, 16),
258
311
  2002: (DEC, 6),
259
- 2003: (NOV, 26),
312
+ 2003: (NOV, 25),
260
313
  2004: (NOV, 14),
261
- 2005: (NOV, 3),
314
+ 2005: (NOV, 4),
262
315
  2006: (OCT, 24),
263
316
  2007: (OCT, 13),
264
317
  2008: (OCT, 1),
265
318
  2009: (SEP, 20),
266
319
  2010: (SEP, 10),
267
- 2011: (AUG, 31),
320
+ 2011: (AUG, 30),
268
321
  2012: (AUG, 19),
269
322
  2013: (AUG, 8),
270
- 2014: (JUL, 29),
271
- 2015: (JUL, 18),
272
- 2016: (JUL, 7),
273
- 2017: (JUN, 26),
323
+ 2014: (JUL, 28),
324
+ 2015: (JUL, 17),
325
+ 2016: (JUL, 6),
326
+ 2017: (JUN, 25),
274
327
  2018: (JUN, 15),
275
328
  2019: (JUN, 5),
276
329
  2020: (MAY, 24),
277
330
  2021: (MAY, 13),
278
- 2022: (MAY, 3),
331
+ 2022: (MAY, 2),
279
332
  2023: (APR, 22),
280
333
  2024: (APR, 10),
334
+ 2025: (MAR, 31),
281
335
  }
282
336
 
283
337
  HIJRI_NEW_YEAR_DATES = {
338
+ 1998: (APR, 28),
339
+ 1999: (APR, 17),
284
340
  2000: (APR, 6),
285
341
  2001: (MAR, 26),
286
342
  2002: (MAR, 15),
287
- 2003: (MAR, 5),
343
+ 2003: (MAR, 4),
288
344
  2004: (FEB, 22),
289
345
  2005: (FEB, 10),
290
346
  2006: (JAN, 31),
291
347
  2007: (JAN, 20),
292
348
  2008: ((JAN, 10), (DEC, 29)),
293
349
  2009: (DEC, 18),
294
- 2010: (DEC, 8),
350
+ 2010: (DEC, 7),
295
351
  2011: (NOV, 27),
296
352
  2012: (NOV, 15),
297
353
  2013: (NOV, 5),
298
354
  2014: (OCT, 25),
299
- 2015: (OCT, 15),
300
- 2016: (OCT, 3),
355
+ 2015: (OCT, 14),
356
+ 2016: (OCT, 2),
301
357
  2017: (SEP, 22),
302
- 2018: (SEP, 12),
358
+ 2018: (SEP, 11),
303
359
  2019: (SEP, 1),
304
360
  2020: (AUG, 20),
305
361
  2021: (AUG, 10),
306
362
  2022: (JUL, 30),
307
363
  2023: (JUL, 19),
308
364
  2024: (JUL, 7),
365
+ 2025: (JUN, 27),
309
366
  }
310
367
 
311
368
  ISRA_AND_MIRAJ_DATES = {
312
- 2000: (OCT, 26),
369
+ 1998: (NOV, 17),
370
+ 1999: (NOV, 6),
371
+ 2000: (OCT, 25),
313
372
  2001: (OCT, 15),
314
373
  2002: (OCT, 4),
315
374
  2003: (SEP, 24),
316
375
  2004: (SEP, 12),
317
376
  2005: (SEP, 1),
318
- 2006: (AUG, 22),
377
+ 2006: (AUG, 21),
319
378
  2007: (AUG, 11),
320
- 2008: (JUL, 31),
379
+ 2008: (JUL, 30),
321
380
  2009: (JUL, 20),
322
- 2010: (JUL, 9),
381
+ 2010: (JUL, 10),
323
382
  2011: (JUN, 29),
324
383
  2012: (JUN, 17),
325
384
  2013: (JUN, 6),
@@ -331,15 +390,18 @@ class BruneiIslamicHolidays(_CustomIslamicHolidays):
331
390
  2019: (APR, 3),
332
391
  2020: (MAR, 22),
333
392
  2021: (MAR, 11),
334
- 2022: (MAR, 1),
393
+ 2022: (FEB, 28),
335
394
  2023: (FEB, 18),
336
395
  2024: (FEB, 8),
396
+ 2025: (JAN, 27),
337
397
  }
338
398
 
339
399
  MAWLID_DATES = {
400
+ 1998: (JUL, 6),
401
+ 1999: (JUN, 26),
340
402
  2000: (JUN, 15),
341
403
  2001: (JUN, 4),
342
- 2002: (MAY, 24),
404
+ 2002: (MAY, 25),
343
405
  2003: (MAY, 14),
344
406
  2004: (MAY, 2),
345
407
  2005: (APR, 21),
@@ -348,24 +410,27 @@ class BruneiIslamicHolidays(_CustomIslamicHolidays):
348
410
  2008: (MAR, 20),
349
411
  2009: (MAR, 9),
350
412
  2010: (FEB, 26),
351
- 2011: (FEB, 16),
413
+ 2011: (FEB, 15),
352
414
  2012: (FEB, 5),
353
415
  2013: (JAN, 24),
354
416
  2014: (JAN, 14),
355
417
  2015: ((JAN, 3), (DEC, 24)),
356
418
  2016: (DEC, 12),
357
419
  2017: (DEC, 1),
358
- 2018: (NOV, 21),
420
+ 2018: (NOV, 20),
359
421
  2019: (NOV, 9),
360
422
  2020: (OCT, 29),
361
423
  2021: (OCT, 19),
362
424
  2022: (OCT, 8),
363
425
  2023: (SEP, 28),
364
426
  2024: (SEP, 16),
427
+ 2025: (SEP, 5),
365
428
  }
366
429
 
367
430
  NUZUL_AL_QURAN_DATES = {
368
- 2000: (DEC, 14),
431
+ 1998: (JAN, 16),
432
+ 1999: ((JAN, 5), (DEC, 25)),
433
+ 2000: (DEC, 13),
369
434
  2001: (DEC, 3),
370
435
  2002: (NOV, 22),
371
436
  2003: (NOV, 12),
@@ -377,23 +442,26 @@ class BruneiIslamicHolidays(_CustomIslamicHolidays):
377
442
  2009: (SEP, 7),
378
443
  2010: (AUG, 27),
379
444
  2011: (AUG, 17),
380
- 2012: (AUG, 5),
381
- 2013: (JUL, 25),
445
+ 2012: (AUG, 6),
446
+ 2013: (JUL, 26),
382
447
  2014: (JUL, 15),
383
448
  2015: (JUL, 4),
384
- 2016: (JUN, 23),
449
+ 2016: (JUN, 22),
385
450
  2017: (JUN, 12),
386
451
  2018: (JUN, 2),
387
- 2019: (MAY, 23),
452
+ 2019: (MAY, 22),
388
453
  2020: (MAY, 10),
389
454
  2021: (APR, 29),
390
455
  2022: (APR, 19),
391
456
  2023: (APR, 8),
392
457
  2024: (MAR, 28),
458
+ 2025: (MAR, 18),
393
459
  }
394
460
 
395
461
  RAMADAN_BEGINNING_DATES = {
396
- 2000: (NOV, 28),
462
+ 1998: (DEC, 20),
463
+ 1999: (DEC, 9),
464
+ 2000: (NOV, 27),
397
465
  2001: (NOV, 17),
398
466
  2002: (NOV, 6),
399
467
  2003: (OCT, 27),
@@ -401,28 +469,47 @@ class BruneiIslamicHolidays(_CustomIslamicHolidays):
401
469
  2005: (OCT, 5),
402
470
  2006: (SEP, 24),
403
471
  2007: (SEP, 13),
404
- 2008: (SEP, 2),
472
+ 2008: (SEP, 1),
405
473
  2009: (AUG, 22),
406
474
  2010: (AUG, 11),
407
475
  2011: (AUG, 1),
408
- 2012: (JUL, 20),
409
- 2013: (JUL, 9),
476
+ 2012: (JUL, 21),
477
+ 2013: (JUL, 10),
410
478
  2014: (JUN, 29),
411
479
  2015: (JUN, 18),
412
- 2016: (JUN, 7),
480
+ 2016: (JUN, 6),
413
481
  2017: (MAY, 27),
414
- 2018: (MAY, 16),
482
+ 2018: (MAY, 17),
415
483
  2019: (MAY, 6),
416
- 2020: (APR, 25),
484
+ 2020: (APR, 24),
417
485
  2021: (APR, 13),
418
486
  2022: (APR, 3),
419
487
  2023: (MAR, 23),
420
488
  2024: (MAR, 12),
489
+ 2025: (MAR, 2),
421
490
  }
422
491
 
423
492
 
424
493
  class BruneiStaticHolidays:
425
494
  special_public_holidays = {
426
- # Sultan Hassanal Bolkiah's Golden Jubilee celebration
495
+ 1998: (
496
+ AUG,
497
+ 10,
498
+ # Proclamation Ceremony of Crown Prince Al-Muhtadee Billah of Brunei.
499
+ tr("Istiadat Pengisytiharan Duli Pengiran Muda Mahkota Al-Muhtadee Billah"),
500
+ ),
501
+ # Royal Wedding of Crown Prince Al-Muhtadee Billah and Crown Princess Sarah of Brunei.
502
+ 2004: (SEP, 9, tr("Istiadat Perkahwinan Diraja Brunei 2004")),
503
+ # Sultan Hassanal Bolkiah's Golden Jubilee celebration.
427
504
  2017: (OCT, 5, tr("Jubli Emas Sultan Hassanal Bolkiah")),
428
505
  }
506
+ special_public_holidays_observed = {
507
+ # Christmas Day.
508
+ 1999: (DEC, 27, tr("Hari Natal")),
509
+ # National Day.
510
+ 2002: (FEB, 25, tr("Hari Kebangsaan")),
511
+ # New Year's Day.
512
+ 2007: (JAN, 2, tr("Awal Tahun Masihi")),
513
+ # Anniversary of the revelation of the Quran.
514
+ 2014: (JUL, 16, tr("Hari Nuzul Al-Quran")),
515
+ }
@@ -48,6 +48,7 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
48
48
  observed_label = tr("%s (почивен ден)")
49
49
  supported_categories = (PUBLIC, SCHOOL)
50
50
  supported_languages = ("bg", "en_US", "uk")
51
+ start_year = 1990
51
52
 
52
53
  def __init__(self, *args, **kwargs):
53
54
  ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
@@ -65,9 +66,6 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
65
66
  self._add_observed(dt, name)
66
67
 
67
68
  def _populate_public_holidays(self):
68
- if self._year <= 1989:
69
- return None
70
-
71
69
  dts_observed = set()
72
70
 
73
71
  # New Year's Day.
@@ -129,9 +127,6 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
129
127
  )
130
128
 
131
129
  def _populate_school_holidays(self):
132
- if self._year <= 1989:
133
- return None
134
-
135
130
  # National Awakening Day.
136
131
  self._add_holiday_nov_1(tr("Ден на народните будители"))
137
132
 
@@ -24,6 +24,9 @@ class BurkinaFaso(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
24
24
 
25
25
  country = "BF"
26
26
  observed_label = "%s (observed)"
27
+ # On 5 August 1960, Burkina Faso (Republic of Upper Volta at that time)
28
+ # gained independence from France.
29
+ start_year = 1961
27
30
 
28
31
  def __init__(self, *args, **kwargs):
29
32
  ChristianHolidays.__init__(self)
@@ -33,11 +36,6 @@ class BurkinaFaso(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
33
36
  super().__init__(*args, **kwargs)
34
37
 
35
38
  def _populate_public_holidays(self):
36
- # On 5 August 1960, Burkina Faso (Republic of Upper Volta at that time)
37
- # gained independence from France.
38
- if self._year <= 1960:
39
- return None
40
-
41
39
  # New Year's Day.
42
40
  self._add_observed(self._add_new_years_day("New Year's Day"))
43
41
 
@@ -28,6 +28,7 @@ class Burundi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isl
28
28
 
29
29
  country = "BI"
30
30
  observed_label = "%s (observed)"
31
+ start_year = 1962
31
32
 
32
33
  def __init__(self, *args, **kwargs):
33
34
  ChristianHolidays.__init__(self)
@@ -37,9 +38,6 @@ class Burundi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isl
37
38
  super().__init__(*args, **kwargs)
38
39
 
39
40
  def _populate_public_holidays(self):
40
- if self._year <= 1961:
41
- return None
42
-
43
41
  # New Year's Day
44
42
  self._add_observed(self._add_new_years_day("New Year's Day"))
45
43
 
@@ -27,6 +27,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
27
27
  - Based on: https://www.nbc.gov.kh/english/news_and_events/official_holiday.php
28
28
  https://www.nbc.gov.kh/news_and_events/official_holiday.php
29
29
  https://en.wikipedia.org/wiki/Public_holidays_in_Cambodia
30
+ https://admin.taftac-cambodia.org/public/pdf_file/regulation_1704245695_Z7IALJjE.pdf
30
31
 
31
32
  - Checked with: https://asean.org/wp-content/uploads/2021/12/ASEAN-National-Holidays-2022.pdf
32
33
  https://asean.org/wp-content/uploads/2022/12/ASEAN-Public-Holidays-2023.pdf
@@ -51,6 +52,8 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
51
52
  country = "KH"
52
53
  default_language = "km"
53
54
  supported_languages = ("en_US", "km", "th")
55
+ # Available post-Independence from 1993 afterwards
56
+ start_year = 1993
54
57
 
55
58
  def __init__(self, *args, **kwargs):
56
59
  InternationalHolidays.__init__(self)
@@ -59,10 +62,6 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
59
62
  super().__init__(*args, **kwargs)
60
63
 
61
64
  def _populate_public_holidays(self):
62
- # Available post-Independence from 1993 afterwards
63
- if self._year <= 1992:
64
- return None
65
-
66
65
  # Fixed Holidays
67
66
 
68
67
  # ទិវាចូលឆ្នាំសាកល
@@ -278,6 +277,16 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
278
277
  self._add_holiday(bon_om_touk, _timedelta(bon_om_touk_date, -1))
279
278
  self._add_holiday(bon_om_touk, _timedelta(bon_om_touk_date, +1))
280
279
 
280
+ # ទិវាសន្តិភាពនៅកម្ពុជា
281
+ # Status: In-Use.
282
+ # Dec 29, added from 2024 onwards.
283
+ # - https://www.khmertimeskh.com/501424903/24-public-holidays-for-2024-peace-day-now-included/
284
+ # - https://www.khmertimeskh.com/501551204/govt-announces-22-public-holidays-for-next-year/
285
+
286
+ if self._year >= 2024:
287
+ # Peace Day in Cambodia.
288
+ self._add_holiday_dec_29(tr("ទិវាសន្តិភាពនៅកម្ពុជា"))
289
+
281
290
 
282
291
  class KH(Cambodia):
283
292
  pass
@@ -33,6 +33,8 @@ class Cameroon(
33
33
 
34
34
  country = "CM"
35
35
  observed_label = "%s (observed)"
36
+ # On 1 January 1960, French Cameroun gained independence from France.
37
+ start_year = 1960
36
38
 
37
39
  def __init__(self, *args, **kwargs):
38
40
  ChristianHolidays.__init__(self)
@@ -43,10 +45,6 @@ class Cameroon(
43
45
  super().__init__(*args, **kwargs)
44
46
 
45
47
  def _populate_public_holidays(self):
46
- # On 1 January 1960, French Cameroun gained independence from France.
47
- if self._year <= 1959:
48
- return None
49
-
50
48
  dts_observed = set()
51
49
 
52
50
  # New Year's Day.
@@ -37,6 +37,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
37
37
  - http://web2.gov.mb.ca/laws/statutes/ccsm/r120e.php
38
38
  - https://www2.gnb.ca/content/gnb/en/departments/elg/local_government/content/governance/content/days_of_rest_act.html
39
39
  - https://www.ontario.ca/document/your-guide-employment-standards-act-0/public-holidays
40
+ - https://www.gov.nu.ca/en/print/pdf/node/52266
40
41
  - https://www.officeholidays.com/countries/canada/
41
42
  - https://www.timeanddate.com/holidays/canada/
42
43
  """
@@ -62,6 +63,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
62
63
  "YT",
63
64
  )
64
65
  supported_languages = ("ar", "en_CA", "en_US", "fr", "th")
66
+ start_year = 1867
65
67
 
66
68
  def __init__(self, *args, **kwargs):
67
69
  ChristianHolidays.__init__(self)
@@ -99,9 +101,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
99
101
  self._add_christmas_day(tr("Christmas Day"))
100
102
 
101
103
  def _populate_public_holidays(self):
102
- if self._year <= 1866:
103
- return None
104
-
105
104
  self._add_statutory_holidays()
106
105
 
107
106
  self._add_observed(self._christmas_day)
@@ -109,9 +108,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
109
108
  def _populate_government_holidays(self):
110
109
  """Holidays for federally regulated workplaces."""
111
110
 
112
- if self._year <= 1866:
113
- return None
114
-
115
111
  self._add_statutory_holidays()
116
112
 
117
113
  if self._year >= 1953:
@@ -141,9 +137,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
141
137
  )
142
138
 
143
139
  def _populate_optional_holidays(self):
144
- if self._year <= 1866:
145
- return None
146
-
147
140
  # Christmas Day.
148
141
  self._add_observed(
149
142
  self._add_christmas_day(tr("Christmas Day")), rule=SAT_SUN_TO_NEXT_MON_TUE
@@ -361,6 +354,10 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
361
354
  # Victoria Day.
362
355
  self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
363
356
 
357
+ if self._year >= 2020:
358
+ # Nunavut Day.
359
+ self._add_holiday_jul_9(tr("Nunavut Day"))
360
+
364
361
  if self._year >= 1900:
365
362
  # Civic Holiday.
366
363
  self._add_holiday_1st_mon_of_aug(tr("Civic Holiday"))
@@ -376,8 +373,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
376
373
  self._add_remembrance_day(tr("Remembrance Day"))
377
374
 
378
375
  def _populate_subdiv_nu_optional_holidays(self):
379
- if self._year >= 2000:
380
- # Nunavut Day.
376
+ if 2000 <= self._year <= 2019:
381
377
  name = tr("Nunavut Day")
382
378
  if self._year == 2000:
383
379
  self._add_holiday_apr_1(name)