holidays 0.85__py3-none-any.whl → 0.87__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 (63) hide show
  1. holidays/calendars/chinese.py +44 -6
  2. holidays/calendars/hindu.py +85 -1
  3. holidays/countries/bangladesh.py +13 -9
  4. holidays/countries/bulgaria.py +208 -50
  5. holidays/countries/estonia.py +55 -9
  6. holidays/countries/germany.py +75 -74
  7. holidays/countries/gibraltar.py +1 -1
  8. holidays/countries/india.py +5 -3
  9. holidays/countries/italy.py +489 -167
  10. holidays/countries/mongolia.py +1 -5
  11. holidays/countries/nepal.py +46 -41
  12. holidays/countries/russia.py +1 -2
  13. holidays/countries/sweden.py +102 -32
  14. holidays/countries/taiwan.py +3 -6
  15. holidays/countries/thailand.py +5 -5
  16. holidays/countries/united_states.py +55 -46
  17. holidays/financial/ny_stock_exchange.py +591 -89
  18. holidays/groups/chinese.py +11 -18
  19. holidays/groups/hindu.py +24 -0
  20. holidays/holiday_base.py +51 -23
  21. holidays/locale/bg/LC_MESSAGES/BG.mo +0 -0
  22. holidays/locale/bn/LC_MESSAGES/BD.mo +0 -0
  23. holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
  24. holidays/locale/en_US/LC_MESSAGES/BD.mo +0 -0
  25. holidays/locale/en_US/LC_MESSAGES/BG.mo +0 -0
  26. holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
  27. holidays/locale/en_US/LC_MESSAGES/EE.mo +0 -0
  28. holidays/locale/en_US/LC_MESSAGES/IT.mo +0 -0
  29. holidays/locale/en_US/LC_MESSAGES/NP.mo +0 -0
  30. holidays/locale/en_US/LC_MESSAGES/SE.mo +0 -0
  31. holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
  32. holidays/locale/et/LC_MESSAGES/EE.mo +0 -0
  33. holidays/locale/gu/LC_MESSAGES/IN.mo +0 -0
  34. holidays/locale/it_IT/LC_MESSAGES/IT.mo +0 -0
  35. holidays/locale/ne/LC_MESSAGES/NP.mo +0 -0
  36. holidays/locale/sv/LC_MESSAGES/SE.mo +0 -0
  37. holidays/locale/th/LC_MESSAGES/CA.mo +0 -0
  38. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  39. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  40. holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
  41. holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
  42. holidays/locale/th/LC_MESSAGES/FI.mo +0 -0
  43. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  44. holidays/locale/th/LC_MESSAGES/NO.mo +0 -0
  45. holidays/locale/th/LC_MESSAGES/SE.mo +0 -0
  46. holidays/locale/th/LC_MESSAGES/TL.mo +0 -0
  47. holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
  48. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  49. holidays/locale/th/LC_MESSAGES/VA.mo +0 -0
  50. holidays/locale/uk/LC_MESSAGES/BG.mo +0 -0
  51. holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
  52. holidays/locale/uk/LC_MESSAGES/EE.mo +0 -0
  53. holidays/locale/uk/LC_MESSAGES/SE.mo +0 -0
  54. holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
  55. holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
  56. holidays/utils.py +10 -1
  57. holidays/version.py +1 -1
  58. {holidays-0.85.dist-info → holidays-0.87.dist-info}/METADATA +18 -11
  59. {holidays-0.85.dist-info → holidays-0.87.dist-info}/RECORD +63 -56
  60. {holidays-0.85.dist-info → holidays-0.87.dist-info}/licenses/CONTRIBUTORS +4 -0
  61. {holidays-0.85.dist-info → holidays-0.87.dist-info}/WHEEL +0 -0
  62. {holidays-0.85.dist-info → holidays-0.87.dist-info}/licenses/LICENSE +0 -0
  63. {holidays-0.85.dist-info → holidays-0.87.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,6 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars.gregorian import _timedelta
16
15
  from holidays.constants import PUBLIC, WORKDAY
17
16
  from holidays.groups import InternationalHolidays, MongolianCalendarHolidays
18
17
  from holidays.holiday_base import HolidayBase
@@ -160,10 +159,7 @@ class Mongolia(HolidayBase, InternationalHolidays, MongolianCalendarHolidays):
160
159
 
161
160
  if self._year >= 2007:
162
161
  # New Harvest Days.
163
- name = tr("Шинэ ургацын өдрүүд")
164
- dt = self._add_holiday_sep_5(name)
165
- for delta in range(1, 46):
166
- self._add_holiday(name, _timedelta(dt, delta))
162
+ self._add_multiday_holiday(self._add_holiday_sep_5(tr("Шинэ ургацын өдрүүд")), 45)
167
163
 
168
164
  # Memorial Day of Political Victims.
169
165
  self._add_holiday_sep_10(tr("Улс төрийн хэлмэгдэгсдийн дурсгалын өдөр"))
@@ -10,6 +10,8 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from gettext import gettext as tr
14
+
13
15
  from holidays.calendars import _CustomIslamicHolidays, _CustomHinduHolidays
14
16
  from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, AUG, SEP, OCT, NOV
15
17
  from holidays.constants import PUBLIC, WORKDAY
@@ -47,10 +49,12 @@ class Nepal(
47
49
  """
48
50
 
49
51
  country = "NP"
52
+ default_language = "ne"
50
53
  # %s (estimated).
51
- estimated_label = "%s (estimated)"
54
+ estimated_label = tr("%s (अनुमानित)")
52
55
  start_year = 2010
53
56
  supported_categories = (PUBLIC, WORKDAY)
57
+ supported_languages = ("en_US", "ne")
54
58
 
55
59
  def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
56
60
  """
@@ -105,7 +109,7 @@ class Nepal(
105
109
  }
106
110
  if dt := martyrs_day_dates.get(self._year):
107
111
  # Martyr's Day.
108
- self._add_holiday("Martyr's Day", dt)
112
+ self._add_holiday(tr("शहीद दिवस"), dt)
109
113
 
110
114
  democracy_day_dates = {
111
115
  2010: (FEB, 19),
@@ -135,7 +139,7 @@ class Nepal(
135
139
  }
136
140
  if dt := democracy_day_dates.get(self._year):
137
141
  # National Democracy Day.
138
- self._add_holiday("National Democracy Day", dt)
142
+ self._add_holiday(tr("राष्ट्रिय प्रजातन्त्र दिवस"), dt)
139
143
 
140
144
  republic_day_dates = {
141
145
  2010: (MAY, 29),
@@ -164,39 +168,40 @@ class Nepal(
164
168
  }
165
169
  if dt := republic_day_dates.get(self._year):
166
170
  # Established in 2009.
171
+
167
172
  # Republic Day.
168
- self._add_holiday("Republic Day", dt)
173
+ self._add_holiday(tr("गणतन्त्र दिवस"), dt)
169
174
 
170
175
  # Hindu Holidays.
171
176
 
172
177
  # Ram Navami.
173
- self._add_ram_navami("Ram Navami")
178
+ self._add_ram_navami(tr("राम नवमी"))
174
179
 
175
180
  # Janai Poornima.
176
- self._add_raksha_bandhan("Janai Poornima")
181
+ self._add_raksha_bandhan(tr("जनै पूर्णिमा"))
177
182
 
178
183
  # Shree Krishna Janmashtami.
179
- self._add_janmashtami("Shree Krishna Janmashtami")
184
+ self._add_janmashtami(tr("श्रीकृष्ण जन्माष्टमी"))
180
185
 
181
186
  # Ghatasthapana.
182
- self._add_sharad_navratri("Ghatasthapana")
187
+ self._add_sharad_navratri(tr("घटस्थापना"))
183
188
 
184
189
  # Duwadashi (Dashain).
185
- self._add_papankusha_duwadashi("Duwadashi (Dashain)")
190
+ self._add_papankusha_duwadashi(tr("दुवादशी (दशैं)"))
186
191
 
187
192
  def _populate_public_holidays(self):
188
193
  if self._year >= 2023:
189
194
  # Prithvi Jayanti.
190
- self._add_holiday_jan_11("Prithvi Jayanti")
195
+ self._add_holiday_jan_11(tr("पृथ्वी जयन्ती"))
191
196
 
192
197
  # International Women's Day.
193
- self._add_womens_day("International Women's Day")
198
+ self._add_womens_day(tr("अन्तर्राष्ट्रिय महिला दिवस"))
194
199
 
195
- # Nepal New Year.
196
- self._add_vaisakhi("Nepali New Year")
200
+ # Nepali New Year.
201
+ self._add_vaisakhi(tr("नेपाली नयाँ वर्ष"))
197
202
 
198
- # International Labour Day.
199
- self._add_labor_day("International Labour Day")
203
+ # International Labor Day.
204
+ self._add_labor_day(tr("अन्तर्राष्ट्रिय श्रम दिवस"))
200
205
 
201
206
  constitution_day_dates = {
202
207
  2016: (SEP, 19),
@@ -219,77 +224,77 @@ class Nepal(
219
224
  }
220
225
  if dt := constitution_day_dates.get(self._year):
221
226
  # Constitution Day.
222
- self._add_holiday("Constitution Day", dt)
227
+ self._add_holiday(tr("संविधान दिवस"), dt)
223
228
 
224
229
  # Christmas Day.
225
- self._add_christmas_day("Christmas Day")
230
+ self._add_christmas_day(tr("क्रिसमसको दिन"))
226
231
 
227
232
  # Hindu holidays.
228
233
 
229
234
  # Maghe Sankranti.
230
- self._add_makar_sankranti("Maghe Sankranti")
235
+ self._add_makar_sankranti(tr("माघे संक्रान्ति"))
231
236
 
232
237
  # Sonam Lhochhar.
233
- self._add_sonam_losar("Sonam Lhochhar")
238
+ self._add_sonam_losar(tr("सोनम ल्होछार"))
234
239
 
235
240
  # Maha Shivaratri.
236
- self._add_maha_shivaratri("Maha Shivaratri")
241
+ self._add_maha_shivaratri(tr("महाशिवरात्रि"))
237
242
 
238
243
  # Gyalpo Lhosar.
239
- self._add_gyalpo_losar("Gyalpo Lhosar")
244
+ self._add_gyalpo_losar(tr("ग्याल्पो ल्होसार"))
240
245
 
241
246
  # Fagu Poornima.
242
- self._add_nepal_holi("Fagu Poornima")
247
+ self._add_nepal_holi(tr("फागुपुर्णिमा"))
243
248
 
244
249
  # Fagu Poornima (Terai).
245
- self._add_holi("Fagu Poornima (Terai)")
250
+ self._add_holi(tr("फागुपूर्णिमा (तराई)"))
246
251
 
247
252
  # Buddha Jayanti.
248
- self._add_buddha_purnima("Buddha Jayanti")
253
+ self._add_buddha_purnima(tr("बुद्ध जयन्ती"))
249
254
 
250
255
  # Fulpati.
251
- self._add_maha_saptami("Fulpati")
256
+ self._add_maha_saptami(tr("फुलपाती"))
252
257
 
253
258
  # Maha Ashtami.
254
- self._add_maha_ashtami("Maha Ashtami")
259
+ self._add_maha_ashtami(tr("महा अष्टमी"))
255
260
 
256
261
  # Maha Navami.
257
- self._add_maha_navami("Maha Navami")
262
+ self._add_maha_navami(tr("महा नवमी"))
258
263
 
259
264
  # Bijaya Dashami.
260
- self._add_dussehra("Bijaya Dashami")
265
+ self._add_dussehra(tr("विजया दशमी"))
261
266
 
262
267
  # Ekadashi (Dashain).
263
- self._add_papankusha_ekadashi("Ekadashi (Dashain)")
268
+ self._add_papankusha_ekadashi(tr("एकादशी (दशैं)"))
264
269
 
265
270
  # Laxmi Pooja.
266
- self._add_diwali_india("Laxmi Pooja")
271
+ self._add_diwali_india(tr("लक्ष्मी पुजा"))
267
272
 
268
273
  # Gai Tihar.
269
- self._add_gau_krida("Gai Tihar")
274
+ self._add_gau_krida(tr("गाई तिहार"))
270
275
 
271
276
  # Gobardhan Pooja.
272
- self._add_govardhan_puja("Gobardhan Pooja")
277
+ self._add_govardhan_puja(tr("गोवर्धन पूजा"))
273
278
 
274
279
  # Mha Pooja.
275
- self._add_govardhan_puja("Mha Pooja")
280
+ self._add_govardhan_puja(tr("म्ह पूजा"))
276
281
 
277
282
  # Bhai Tika.
278
- self._add_bhai_dooj("Bhai Tika")
283
+ self._add_bhai_dooj(tr("भाइटीका"))
279
284
 
280
285
  # Chhath Parva.
281
- self._add_chhath_puja("Chhath Parva")
286
+ self._add_chhath_puja(tr("छठ पर्व"))
282
287
 
283
288
  # Tamu Lhochhar.
284
- self._add_tamu_losar("Tamu Lhochhar")
289
+ self._add_tamu_losar(tr("तमु ल्हाेसार"))
285
290
 
286
291
  # Islamic holidays.
287
292
 
288
293
  # Eid al-Fitr.
289
- self._add_eid_al_fitr_day("Id-ul-Fitr")
294
+ self._add_eid_al_fitr_day(tr("इद उल फित्र"))
290
295
 
291
296
  # Eid al-Adha.
292
- self._add_eid_al_adha_day("Bakrid")
297
+ self._add_eid_al_adha_day(tr("बकरीद"))
293
298
 
294
299
  # Removed by MoHA between 2019-2020.
295
300
  self._add_non_continuous_holidays()
@@ -398,10 +403,10 @@ class NepalStaticHolidays:
398
403
  """
399
404
 
400
405
  # Day of National Mourning.
401
- name_day_of_national_mourning = "Day of National Mourning"
406
+ name_day_of_national_mourning = tr("राष्ट्रिय शोक दिवस")
402
407
 
403
408
  # Tihar Holiday.
404
- name_tihar_holiday = "Tihar Holiday"
409
+ name_tihar_holiday = tr("तिहार बिदा")
405
410
 
406
411
  special_public_holidays = {
407
412
  2011: (MAR, 6, name_day_of_national_mourning),
@@ -411,7 +416,7 @@ class NepalStaticHolidays:
411
416
  2023: (
412
417
  (JAN, 16, name_day_of_national_mourning),
413
418
  # People War's Day.
414
- (FEB, 13, "People War's Day"),
419
+ (FEB, 13, tr("जनयुद्ध दिवस")),
415
420
  (SEP, 14, name_day_of_national_mourning),
416
421
  (NOV, 16, name_tihar_holiday),
417
422
  ),
@@ -47,8 +47,7 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
47
47
  else:
48
48
  # New Year Holidays.
49
49
  name = tr("Новогодние каникулы")
50
- for day in range(1, 6):
51
- self._add_holiday(name, JAN, day)
50
+ self._add_multiday_holiday(self._add_new_years_day(name), 4)
52
51
  if self._year >= 2013:
53
52
  self._add_holiday_jan_6(name)
54
53
  self._add_holiday_jan_8(name)
@@ -10,9 +10,17 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from datetime import date
13
14
  from gettext import gettext as tr
14
15
 
15
- from holidays.calendars.gregorian import _timedelta, _get_all_sundays
16
+ from holidays.calendars.gregorian import (
17
+ MAR,
18
+ SUN,
19
+ _get_all_sundays,
20
+ _get_nth_weekday_from,
21
+ _timedelta,
22
+ )
23
+ from holidays.constants import BANK, OPTIONAL, PUBLIC
16
24
  from holidays.groups import ChristianHolidays, InternationalHolidays
17
25
  from holidays.holiday_base import HolidayBase
18
26
 
@@ -22,21 +30,25 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
22
30
 
23
31
  References:
24
32
  * <https://sv.wikipedia.org/wiki/Helgdagar_i_Sverige>
25
- * <https://web.archive.org/web/20250414065223/https://www.riksdagen.se/sv/dokument-lagar/dokument/svensk-forfattningssamling/lag-1989253-om-allmanna-helgdagar_sfs-1989-253>
33
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Sweden>
34
+ * [Act 1952:48](https://web.archive.org/web/20250518071409/https://blogs.loc.gov/law/2023/06/midsommar-becomes-weekend-holiday-in-sweden-in-1953-pic-of-the-week/)
35
+ * [Act 1989:253](https://web.archive.org/web/20250414065223/https://www.riksdagen.se/sv/dokument-lagar/dokument/svensk-forfattningssamling/lag-1989253-om-allmanna-helgdagar_sfs-1989-253)
26
36
  * <https://sv.wikipedia.org/wiki/Första_maj>
27
37
  * <https://sv.wikipedia.org/wiki/Sveriges_nationaldag>
28
38
  * <https://sv.wikipedia.org/wiki/Midsommarafton>
29
-
30
-
31
- Note that holidays falling on a sunday is "lost", it will not be moved
32
- to another day to make up for the collision.
39
+ * [Bank Holidays 2025](https://web.archive.org/web/20250811112642/https://www.riksbank.se/sv/press-och-publicerat/kalender/helgdagar-2025/)
33
40
 
34
41
  In Sweden, ALL sundays are considered a holiday.
35
42
  Initialize this class with `include_sundays=False` to not include sundays as a holiday.
36
43
  """
37
44
 
45
+ # %s (from 2pm).
46
+ begin_time_label = tr("%s (från kl. 14.00)")
38
47
  country = "SE"
39
48
  default_language = "sv"
49
+ # Act 1952:48.
50
+ start_year = 1953
51
+ supported_categories = (BANK, OPTIONAL, PUBLIC)
40
52
  supported_languages = ("en_US", "sv", "th", "uk")
41
53
 
42
54
  def __init__(self, *args, include_sundays: bool = True, **kwargs):
@@ -57,9 +69,18 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
57
69
  # Epiphany.
58
70
  self._add_epiphany_day(tr("Trettondedag jul"))
59
71
 
60
- if self._year <= 1953:
61
- # Feast of the Annunciation.
62
- self._add_holiday_mar_25(tr("Jungfru Marie bebådelsedag"))
72
+ if self._year <= 1989:
73
+ # According to Act 1952:48, Feast of the Annunciation is
74
+ # "on the Sunday between March 22 and 28 or, if this Sunday is Palm Sunday
75
+ # or Easter Sunday, on the Sunday before Palm Sunday".
76
+ dt = _get_nth_weekday_from(1, SUN, date(self._year, MAR, 22))
77
+ self._add_holiday(
78
+ # Feast of the Annunciation.
79
+ tr("Marie bebådelsedag"),
80
+ _timedelta(self._easter_sunday, -14)
81
+ if dt == _timedelta(self._easter_sunday, -7) or dt == self._easter_sunday
82
+ else dt,
83
+ )
63
84
 
64
85
  # Good Friday.
65
86
  self._add_good_friday(tr("Långfredagen"))
@@ -70,16 +91,15 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
70
91
  # Easter Monday.
71
92
  self._add_easter_monday(tr("Annandag påsk"))
72
93
 
73
- if self._year >= 1939:
74
- # May Day.
75
- self._add_labor_day(tr("Första maj"))
94
+ # May Day.
95
+ self._add_labor_day(tr("Första maj"))
76
96
 
77
97
  # Ascension Day.
78
98
  self._add_ascension_thursday(tr("Kristi himmelsfärdsdag"))
79
99
 
80
100
  if self._year >= 2005:
81
- # National Day of Sweden.
82
- self._add_holiday_jun_6(tr("Sveriges nationaldag"))
101
+ # National Day.
102
+ self._add_holiday_jun_6(tr("Nationaldagen"))
83
103
 
84
104
  # Whit Sunday.
85
105
  self._add_whit_sunday(tr("Pingstdagen"))
@@ -88,23 +108,11 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
88
108
  # Whit Monday.
89
109
  self._add_whit_monday(tr("Annandag pingst"))
90
110
 
91
- # Midsummer Eve.
92
- name = tr("Midsommarafton")
93
- dt = (
94
- self._add_holiday_1st_fri_from_jun_19(name)
95
- if self._year >= 1953
96
- else self._add_holiday_jun_23(name)
97
- )
98
-
99
111
  # Midsummer Day.
100
- self._add_holiday(tr("Midsommardagen"), _timedelta(dt, +1))
112
+ self._add_holiday_1st_sat_from_jun_20(tr("Midsommardagen"))
101
113
 
102
- if self._year >= 1953:
103
- # All Saints' Day.
104
- self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
105
-
106
- # Christmas Eve.
107
- self._add_christmas_eve(tr("Julafton"))
114
+ # All Saints' Day.
115
+ self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
108
116
 
109
117
  # Christmas Day.
110
118
  self._add_christmas_day(tr("Juldagen"))
@@ -112,15 +120,77 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
112
120
  # Second Day of Christmas.
113
121
  self._add_christmas_day_two(tr("Annandag jul"))
114
122
 
115
- # New Year's Eve.
116
- self._add_new_years_eve(tr("Nyårsafton"))
117
-
118
123
  # Optionally add all Sundays of the year.
119
124
  if self.include_sundays:
120
125
  for dt in _get_all_sundays(self._year):
121
126
  # Sunday.
122
127
  self._add_holiday(tr("Söndag"), dt)
123
128
 
129
+ def _populate_common(self):
130
+ """Populate holidays that are both optional and bank holidays."""
131
+
132
+ # Twelfth Night.
133
+ self._add_holiday_jan_5(self.tr(self.begin_time_label) % self.tr("Trettondagsafton"))
134
+
135
+ # Maundy Thursday.
136
+ self._add_holy_thursday(self.tr(self.begin_time_label) % self.tr("Skärtorsdagen"))
137
+
138
+ # Walpurgis Night.
139
+ self._add_holiday_apr_30(self.tr(self.begin_time_label) % self.tr("Valborgsmässoafton"))
140
+
141
+ # Midsummer Eve.
142
+ self._add_holiday_1st_fri_from_jun_19(tr("Midsommarafton"))
143
+
144
+ self._add_holiday_1st_fri_from_oct_30(
145
+ # All Saints' Eve.
146
+ self.tr(self.begin_time_label) % self.tr("Allahelgonsafton")
147
+ )
148
+
149
+ # Christmas Eve.
150
+ self._add_christmas_eve(tr("Julafton"))
151
+
152
+ # New Year's Eve.
153
+ self._add_new_years_eve(tr("Nyårsafton"))
154
+
155
+ def _populate_bank_holidays(self):
156
+ self._populate_common()
157
+
158
+ self._add_holiday_38_days_past_easter(
159
+ # Day before Ascension Day.
160
+ self.tr(self.begin_time_label) % self.tr("Dag före Kristi himmelsfärdsdag")
161
+ )
162
+
163
+ self._add_holiday_1st_thu_from_jun_18(
164
+ # Day before Midsummer Eve.
165
+ self.tr(self.begin_time_label) % self.tr("Dag före Midsommarafton")
166
+ )
167
+
168
+ self._add_holiday_47_days_past_easter(
169
+ # Day before Whitsun Eve.
170
+ self.tr(self.begin_time_label) % self.tr("Dag före Pingstafton")
171
+ )
172
+
173
+ # Day before Christmas Eve.
174
+ self._add_holiday_dec_23(self.tr(self.begin_time_label) % self.tr("Dag före Julafton"))
175
+
176
+ # Day before New Year's Eve.
177
+ self._add_holiday_dec_30(self.tr(self.begin_time_label) % self.tr("Dag före Nyårsafton"))
178
+
179
+ def _populate_optional_holidays(self):
180
+ self._populate_common()
181
+
182
+ # Holy Saturday.
183
+ self._add_holy_saturday(tr("Påskafton"))
184
+
185
+ # Days between a holiday and a weekend are in Swedish called "klämdagar" (squeeze days).
186
+ # There is one permanent "klämdag" every year - Friday after Ascension Day.
187
+
188
+ # Squeeze day.
189
+ self._add_holiday_40_days_past_easter(tr("Klämdag"))
190
+
191
+ # Whitsun Eve.
192
+ self._add_holiday_48_days_past_easter(tr("Pingstafton"))
193
+
124
194
 
125
195
  class SE(Sweden):
126
196
  pass
@@ -32,7 +32,6 @@ from holidays.calendars.gregorian import (
32
32
  FRI,
33
33
  SAT,
34
34
  SUN,
35
- _get_nth_weekday_of_month,
36
35
  )
37
36
  from holidays.constants import GOVERNMENT, OPTIONAL, PUBLIC, SCHOOL, WORKDAY
38
37
  from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
@@ -101,10 +100,8 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
101
100
  if dt.year <= 2000:
102
101
  weekend = {SUN}
103
102
  if dt.weekday() == SAT:
104
- if dt in {
105
- _get_nth_weekday_of_month(2, SAT, dt.month, dt.year), # 2nd Saturday.
106
- _get_nth_weekday_of_month(4, SAT, dt.month, dt.year), # 4th Saturday.
107
- }:
103
+ nth_saturday = (dt.day - 1) // 7 + 1 # Saturday number in the month.
104
+ if nth_saturday in {2, 4}:
108
105
  weekend.add(SAT)
109
106
  else:
110
107
  weekend = {SAT, SUN}
@@ -348,7 +345,7 @@ class TaiwanStaticHolidays:
348
345
  substituted_date_format = tr("%Y-%m-%d")
349
346
 
350
347
  # Day off (substituted from %s).
351
- substituted_label = tr("休息日(%s日起取代)")
348
+ substituted_label = tr("放假日(%s 補班)")
352
349
 
353
350
  # Women's Day.
354
351
  womens_day = tr("婦女節")
@@ -322,11 +322,11 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
322
322
  if self._year <= 1937:
323
323
  self._add_holiday_apr_3(name)
324
324
  elif self._year <= 1925:
325
- # Songkran New Year Holidays.
326
- name = tr("พระราชพิธีตะรุษะสงกรานต์ แลนักขัตฤกษ์")
327
- dt = self._add_holiday_mar_28(name)
328
- for delta in range(1, 19):
329
- self._add_holiday(name, _timedelta(dt, delta))
325
+ self._add_multiday_holiday(
326
+ # Songkran New Year Holidays.
327
+ self._add_holiday_mar_28(tr("พระราชพิธีตะรุษะสงกรานต์ แลนักขัตฤกษ์")),
328
+ 18,
329
+ )
330
330
  else:
331
331
  dt = self._add_holiday_apr_13(name)
332
332
  self._add_holiday_apr_14(name)
@@ -387,43 +387,45 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
387
387
  self._add_holiday_3rd_mon_of_jan(tr("Martin Luther King Jr. Day"))
388
388
 
389
389
  if self._year >= 1879 and self.subdiv not in {
390
- "AK",
391
390
  "AL",
392
391
  "AR",
393
- "AZ",
394
- "CA",
395
- "CO",
396
392
  "DE",
397
393
  "FL",
398
394
  "GA",
399
- "HI",
400
- "ID",
401
395
  "IN",
402
- "MD",
403
- "MN",
404
- "MT",
405
- "NJ",
406
396
  "NM",
407
- "OH",
408
- "OK",
409
- "OR",
410
- "PA",
411
- "PR",
412
- "SC",
413
- "TN",
414
- "TX",
415
- "UT",
416
- "VA",
417
397
  "VI",
418
- "VT",
419
- "WA",
420
- "WV",
421
- "WY",
422
398
  }:
423
399
  # Washington's Birthday.
424
400
  name = tr("Washington's Birthday")
425
401
  if self._year >= 1971:
426
- self._add_holiday_3rd_mon_of_feb(name)
402
+ if self.subdiv not in {
403
+ "AK",
404
+ "AZ",
405
+ "CA",
406
+ "CO",
407
+ "HI",
408
+ "ID",
409
+ "MD",
410
+ "MN",
411
+ "MT",
412
+ "NJ",
413
+ "OH",
414
+ "OK",
415
+ "OR",
416
+ "PA",
417
+ "PR",
418
+ "SC",
419
+ "TN",
420
+ "TX",
421
+ "UT",
422
+ "VA",
423
+ "VT",
424
+ "WA",
425
+ "WV",
426
+ "WY",
427
+ }:
428
+ self._add_holiday_3rd_mon_of_feb(name)
427
429
  else:
428
430
  self._add_holiday_feb_22(name)
429
431
 
@@ -494,13 +496,9 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
494
496
  tr("Martin Luther King, Jr & Robert E. Lee's Birthday")
495
497
  )
496
498
 
497
- if self._year >= 1879:
499
+ if self._year >= 1971:
498
500
  # George Washington & Thomas Jefferson's Birthday.
499
- name = tr("George Washington & Thomas Jefferson's Birthday")
500
- if self._year >= 1971:
501
- self._add_holiday_3rd_mon_of_feb(name)
502
- else:
503
- self._add_holiday_feb_22(name)
501
+ self._add_holiday_3rd_mon_of_feb(tr("George Washington & Thomas Jefferson's Birthday"))
504
502
 
505
503
  if self._year >= 1866:
506
504
  # Confederate Memorial Day.
@@ -529,13 +527,11 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
529
527
  else tr("Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays")
530
528
  )
531
529
 
532
- if self._year >= 1879:
533
- # George Washington's Birthday and Daisy Gatson Bates Day.
534
- name = tr("George Washington's Birthday and Daisy Gatson Bates Day")
535
- if self._year >= 1971:
536
- self._add_holiday_3rd_mon_of_feb(name)
537
- else:
538
- self._add_holiday_feb_22(name)
530
+ if self._year >= 1971:
531
+ self._add_holiday_3rd_mon_of_feb(
532
+ # George Washington's Birthday and Daisy Gatson Bates Day.
533
+ tr("George Washington's Birthday and Daisy Gatson Bates Day")
534
+ )
539
535
 
540
536
  def _populate_subdiv_as_public_holidays(self):
541
537
  if self._year >= 1901:
@@ -635,6 +631,15 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
635
631
  # Good Friday.
636
632
  self._add_good_friday(tr("Good Friday"))
637
633
 
634
+ if 1971 <= self._year <= 2009:
635
+ self._add_holiday_3rd_mon_of_feb(
636
+ # Presidents' Day.
637
+ tr("Presidents' Day")
638
+ if self._year >= 1990
639
+ # Washington's Birthday.
640
+ else tr("Washington's Birthday")
641
+ )
642
+
638
643
  if self._year >= 2008 and self._year % 2 == 0:
639
644
  # Election Day.
640
645
  self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day"))
@@ -684,11 +689,13 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
684
689
  else tr("Robert E. Lee's Birthday")
685
690
  )
686
691
 
687
- if self._year >= 1879:
688
- self._add_holiday(
692
+ if self._year >= 1971:
693
+ self._add_observed(
694
+ self._christmas_day,
689
695
  # Washington's Birthday.
690
- tr("Washington's Birthday"),
691
- self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY),
696
+ name=tr("Washington's Birthday"),
697
+ rule=GA_IN_WASHINGTON_BIRTHDAY,
698
+ show_observed_label=False,
692
699
  )
693
700
 
694
701
  def _populate_subdiv_gu_public_holidays(self):
@@ -780,11 +787,13 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
780
787
  # Lincoln's Birthday.
781
788
  self._add_holiday_1_day_past_4th_thu_of_nov(tr("Lincoln's Birthday"))
782
789
 
783
- if self._year >= 1879:
784
- self._add_holiday(
790
+ if self._year >= 1971:
791
+ self._add_observed(
792
+ self._christmas_day,
785
793
  # Washington's Birthday.
786
- tr("Washington's Birthday"),
787
- self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY),
794
+ name=tr("Washington's Birthday"),
795
+ rule=GA_IN_WASHINGTON_BIRTHDAY,
796
+ show_observed_label=False,
788
797
  )
789
798
 
790
799
  def _populate_subdiv_ks_public_holidays(self):