holidays 0.47__py3-none-any.whl → 0.49__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.
- holidays/__init__.py +1 -1
- holidays/calendars/gregorian.py +31 -7
- holidays/calendars/persian.py +3 -2
- holidays/calendars/thai.py +24 -20
- holidays/countries/__init__.py +1 -0
- holidays/countries/angola.py +2 -2
- holidays/countries/aruba.py +2 -3
- holidays/countries/australia.py +1 -3
- holidays/countries/belgium.py +1 -2
- holidays/countries/bolivia.py +1 -2
- holidays/countries/brazil.py +1 -2
- holidays/countries/cambodia.py +7 -8
- holidays/countries/canada.py +2 -1
- holidays/countries/chile.py +6 -6
- holidays/countries/colombia.py +1 -2
- holidays/countries/curacao.py +3 -4
- holidays/countries/cyprus.py +1 -2
- holidays/countries/denmark.py +1 -2
- holidays/countries/finland.py +3 -3
- holidays/countries/france.py +1 -2
- holidays/countries/greece.py +11 -6
- holidays/countries/hongkong.py +398 -133
- holidays/countries/israel.py +13 -13
- holidays/countries/italy.py +2 -4
- holidays/countries/japan.py +17 -6
- holidays/countries/jersey.py +2 -2
- holidays/countries/laos.py +7 -23
- holidays/countries/madagascar.py +2 -3
- holidays/countries/malaysia.py +545 -235
- holidays/countries/moldova.py +1 -2
- holidays/countries/netherlands.py +2 -3
- holidays/countries/new_zealand.py +10 -11
- holidays/countries/palau.py +127 -0
- holidays/countries/portugal.py +2 -6
- holidays/countries/saudi_arabia.py +2 -3
- holidays/countries/south_korea.py +18 -5
- holidays/countries/sweden.py +2 -3
- holidays/countries/switzerland.py +2 -3
- holidays/countries/timor_leste.py +23 -1
- holidays/countries/united_states.py +1 -1
- holidays/countries/uruguay.py +3 -4
- holidays/financial/__init__.py +1 -0
- holidays/financial/ice_futures_europe.py +47 -0
- holidays/financial/ny_stock_exchange.py +17 -4
- holidays/groups/chinese.py +2 -3
- holidays/groups/christian.py +18 -19
- holidays/groups/international.py +10 -0
- holidays/groups/islamic.py +2 -2
- holidays/groups/persian.py +2 -2
- holidays/helpers.py +9 -3
- holidays/holiday_base.py +133 -66
- holidays/locale/en_US/LC_MESSAGES/MY.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MY.po +250 -0
- holidays/locale/ms_MY/LC_MESSAGES/MY.mo +0 -0
- holidays/locale/ms_MY/LC_MESSAGES/MY.po +250 -0
- holidays/mixins.py +31 -0
- holidays/observed_holiday_base.py +25 -13
- holidays/registry.py +2 -0
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/METADATA +29 -21
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/RECORD +64 -57
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/AUTHORS +0 -0
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/LICENSE +0 -0
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/WHEEL +0 -0
- {holidays-0.47.dist-info → holidays-0.49.dist-info}/top_level.txt +0 -0
holidays/countries/hongkong.py
CHANGED
|
@@ -11,22 +11,35 @@
|
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
13
|
from datetime import date
|
|
14
|
-
from
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
from typing import Tuple
|
|
15
|
+
|
|
16
|
+
from holidays.calendars.gregorian import (
|
|
17
|
+
JAN,
|
|
18
|
+
MAY,
|
|
19
|
+
JUN,
|
|
20
|
+
JUL,
|
|
21
|
+
AUG,
|
|
22
|
+
SEP,
|
|
23
|
+
OCT,
|
|
24
|
+
DEC,
|
|
25
|
+
SUN,
|
|
26
|
+
_timedelta,
|
|
27
|
+
CHRISTMAS,
|
|
28
|
+
WINTER_SOLSTICE,
|
|
29
|
+
)
|
|
30
|
+
from holidays.constants import OPTIONAL, PUBLIC
|
|
18
31
|
from holidays.groups import (
|
|
19
32
|
ChineseCalendarHolidays,
|
|
20
33
|
ChristianHolidays,
|
|
21
34
|
InternationalHolidays,
|
|
22
35
|
StaticHolidays,
|
|
23
36
|
)
|
|
37
|
+
from holidays.mixins import PreferredDiscretionaryHolidays
|
|
24
38
|
from holidays.observed_holiday_base import (
|
|
25
39
|
ObservedHolidayBase,
|
|
26
|
-
WORKDAY_TO_NEXT_WORKDAY,
|
|
27
|
-
MON_TO_NEXT_TUE,
|
|
28
|
-
SUN_TO_NEXT_WORKDAY,
|
|
29
40
|
SAT_SUN_TO_NEXT_WORKDAY,
|
|
41
|
+
SUN_TO_NEXT_WORKDAY,
|
|
42
|
+
WORKDAY_TO_NEXT_WORKDAY,
|
|
30
43
|
)
|
|
31
44
|
|
|
32
45
|
|
|
@@ -35,176 +48,386 @@ class HongKong(
|
|
|
35
48
|
ChineseCalendarHolidays,
|
|
36
49
|
ChristianHolidays,
|
|
37
50
|
InternationalHolidays,
|
|
51
|
+
PreferredDiscretionaryHolidays,
|
|
38
52
|
StaticHolidays,
|
|
39
53
|
):
|
|
40
54
|
"""
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
References:
|
|
56
|
+
- `English Wikipedia <https://en.wikipedia.org/wiki/Public_holidays_in_Hong_Kong>`_
|
|
57
|
+
- `Chinese Wikipedia <https://zh.wikipedia.org/wiki/香港節日與公眾假期>`_
|
|
58
|
+
Statutory Holidays:
|
|
59
|
+
- `Section 39 of Cap. 57 Employment Ordinance <https://www.elegislation.gov.hk/hk/cap57!en-zh-Hant-HK?INDEX_CS=N&xpid=ID_1438403463460_002>`_ # noqa: E501
|
|
60
|
+
- `Holidays for 2010-2024 <https://www.labour.gov.hk/eng/news/holidays_list.htm>`_
|
|
61
|
+
General Holidays:
|
|
62
|
+
- `Cap. 149 General Holidays Ordinance <https://www.elegislation.gov.hk/hk/cap149!en-zh-Hant-HK?INDEX_CS=N>`_ # noqa: E501
|
|
63
|
+
- `Holidays for 2007–2024 <https://www.gov.hk/en/about/abouthk/holiday/index.htm>`_
|
|
44
64
|
"""
|
|
45
65
|
|
|
46
66
|
country = "HK"
|
|
47
|
-
|
|
67
|
+
default_preferred_discretionary_holidays = (CHRISTMAS,)
|
|
68
|
+
# %s(慶祝).
|
|
69
|
+
observed_label = "%s (observed)"
|
|
70
|
+
supported_categories = (OPTIONAL, PUBLIC)
|
|
71
|
+
weekend = {SUN}
|
|
48
72
|
|
|
49
73
|
def __init__(self, *args, **kwargs):
|
|
50
74
|
ChineseCalendarHolidays.__init__(self)
|
|
51
75
|
ChristianHolidays.__init__(self)
|
|
52
76
|
InternationalHolidays.__init__(self)
|
|
77
|
+
PreferredDiscretionaryHolidays.__init__(
|
|
78
|
+
self, kwargs.pop("preferred_discretionary_holidays", None)
|
|
79
|
+
)
|
|
53
80
|
StaticHolidays.__init__(self, HongKongStaticHolidays)
|
|
54
81
|
kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
|
|
55
82
|
super().__init__(*args, **kwargs)
|
|
56
83
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
dt = dt if isinstance(dt, date) else date(self._year, *dt)
|
|
60
|
-
rule = (
|
|
61
|
-
WORKDAY_TO_NEXT_WORKDAY + SAT_SUN_TO_NEXT_WORKDAY
|
|
62
|
-
if dt in self
|
|
63
|
-
else self._observed_rule
|
|
64
|
-
)
|
|
65
|
-
is_obs, dt_observed = self._add_observed(dt, name=name, rule=rule)
|
|
66
|
-
return dt_observed if is_obs else super()._add_holiday(name, dt) # type: ignore[arg-type]
|
|
67
|
-
|
|
68
|
-
def _populate_public_holidays(self):
|
|
69
|
-
# Current set of holidays actually valid since 1946
|
|
70
|
-
if self._year <= 1945:
|
|
71
|
-
return None
|
|
84
|
+
def _add_mid_autumn(self) -> date:
|
|
85
|
+
# Chinese Mid-Autumn Festival.
|
|
72
86
|
|
|
73
|
-
|
|
87
|
+
mid_autumn_date = self._mid_autumn_festival
|
|
88
|
+
if self._year >= 1968:
|
|
89
|
+
mid_autumn_date = _timedelta(mid_autumn_date, +1)
|
|
90
|
+
# 中秋節翌日.
|
|
91
|
+
name = "The day following the Chinese Mid-Autumn Festival"
|
|
92
|
+
# 中秋節後第二日.
|
|
93
|
+
second_name = "The second day following the Chinese Mid-Autumn Festival"
|
|
94
|
+
else:
|
|
95
|
+
# 中秋節.
|
|
96
|
+
name = "Chinese Mid-Autumn Festival"
|
|
97
|
+
second_name = "The day following the Chinese Mid-Autumn Festival"
|
|
74
98
|
|
|
75
|
-
|
|
76
|
-
|
|
99
|
+
if self._is_sunday(mid_autumn_date):
|
|
100
|
+
if 1983 <= self._year <= 2010:
|
|
101
|
+
self._add_holiday("Chinese Mid-Autumn Festival", _timedelta(mid_autumn_date, -1))
|
|
102
|
+
else:
|
|
103
|
+
self._add_holiday(second_name, _timedelta(mid_autumn_date, +1))
|
|
104
|
+
else:
|
|
105
|
+
self._add_holiday(name, mid_autumn_date)
|
|
106
|
+
return mid_autumn_date
|
|
77
107
|
|
|
78
|
-
|
|
108
|
+
def _add_lunar_new_year(self, day_three_start_year: int):
|
|
109
|
+
# Lunar New Year.
|
|
110
|
+
# 農曆年初一.
|
|
79
111
|
name = "Lunar New Year's Day"
|
|
112
|
+
# 農曆年初一的前一日.
|
|
80
113
|
preceding_day_lunar = "The day preceding Lunar New Year's Day"
|
|
114
|
+
# 農曆年初二.
|
|
81
115
|
second_day_lunar = "The second day of Lunar New Year"
|
|
116
|
+
# 農曆年初三.
|
|
82
117
|
third_day_lunar = "The third day of Lunar New Year"
|
|
118
|
+
# 農曆年初四.
|
|
83
119
|
fourth_day_lunar = "The fourth day of Lunar New Year"
|
|
84
120
|
dt_lunar_new_year = self._chinese_new_year
|
|
85
|
-
if self.
|
|
86
|
-
if
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
121
|
+
if self._year >= 1983:
|
|
122
|
+
if (
|
|
123
|
+
self._is_friday(dt_lunar_new_year)
|
|
124
|
+
or self._is_saturday(dt_lunar_new_year)
|
|
125
|
+
or self._is_sunday(dt_lunar_new_year)
|
|
126
|
+
):
|
|
127
|
+
if self._year >= 2012:
|
|
90
128
|
self._add_chinese_new_years_day_four(fourth_day_lunar)
|
|
91
|
-
|
|
129
|
+
else:
|
|
130
|
+
self._add_chinese_new_years_eve(preceding_day_lunar)
|
|
131
|
+
|
|
132
|
+
if not self._is_sunday(dt_lunar_new_year):
|
|
92
133
|
self._add_chinese_new_years_day(name)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
else:
|
|
134
|
+
|
|
135
|
+
if not self._is_saturday(dt_lunar_new_year):
|
|
96
136
|
self._add_chinese_new_years_day_two(second_day_lunar)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
else:
|
|
137
|
+
|
|
138
|
+
if not self._is_friday(dt_lunar_new_year):
|
|
100
139
|
self._add_chinese_new_years_day_three(third_day_lunar)
|
|
101
140
|
else:
|
|
102
141
|
self._add_chinese_new_years_day(name)
|
|
103
142
|
self._add_chinese_new_years_day_two(second_day_lunar)
|
|
104
|
-
self.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
143
|
+
if self._year >= day_three_start_year:
|
|
144
|
+
self._add_chinese_new_years_day_three(third_day_lunar)
|
|
145
|
+
|
|
146
|
+
def _populate_public_holidays(self):
|
|
147
|
+
# Statutory Holidays.
|
|
148
|
+
|
|
149
|
+
# Industrial Employment Ordinance implemented in April 1962.
|
|
150
|
+
if self._year <= 1962:
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
# The first day of January.
|
|
154
|
+
# 一月一日.
|
|
155
|
+
if self._year >= 1977:
|
|
156
|
+
self._add_observed(self._add_new_years_day("The first day of January"))
|
|
157
|
+
|
|
158
|
+
self._add_lunar_new_year(day_three_start_year=1977)
|
|
159
|
+
|
|
160
|
+
# Good Friday.
|
|
161
|
+
# 耶穌受難節.
|
|
162
|
+
if self._year >= 2028:
|
|
163
|
+
self._add_good_friday("Good Friday")
|
|
164
|
+
|
|
165
|
+
# The day following Good Friday.
|
|
166
|
+
# 耶穌受難節翌日.
|
|
167
|
+
if self._year >= 2030:
|
|
168
|
+
self._add_holy_saturday("The day following Good Friday")
|
|
169
|
+
|
|
170
|
+
# Easter Monday.
|
|
171
|
+
# 復活節星期一.
|
|
172
|
+
if self._year >= 2026:
|
|
173
|
+
self._add_easter_monday("Easter Monday")
|
|
129
174
|
|
|
175
|
+
# Ching Ming Festival.
|
|
176
|
+
# 清明節.
|
|
177
|
+
self._add_observed(self._add_qingming_festival("Ching Ming Festival"))
|
|
178
|
+
|
|
179
|
+
# The Birthday of the Buddha.
|
|
180
|
+
# 佛誕.
|
|
181
|
+
if self._year >= 2022:
|
|
182
|
+
self._add_observed(self._add_chinese_birthday_of_buddha("The Birthday of the Buddha"))
|
|
183
|
+
|
|
184
|
+
# Labour Day.
|
|
185
|
+
# 勞動節.
|
|
130
186
|
if self._year >= 1999:
|
|
131
|
-
|
|
132
|
-
|
|
187
|
+
self._add_observed(self._add_labor_day("Labour Day"))
|
|
188
|
+
|
|
189
|
+
# Tuen Ng Festival.
|
|
190
|
+
# 端午節.
|
|
191
|
+
self._add_observed(self._add_dragon_boat_festival("Tuen Ng Festival"))
|
|
192
|
+
|
|
193
|
+
# Hong Kong Special Administrative Region Establishment Day.
|
|
194
|
+
# 香港特別行政區成立紀念日.
|
|
195
|
+
if self._year >= 1997:
|
|
196
|
+
self._add_observed(
|
|
197
|
+
self._add_holiday_jul_1(
|
|
198
|
+
"Hong Kong Special Administrative Region Establishment Day"
|
|
199
|
+
)
|
|
200
|
+
)
|
|
133
201
|
|
|
134
|
-
|
|
135
|
-
self._add_labor_day("Labour Day")
|
|
202
|
+
mid_autumn_date = self._add_mid_autumn()
|
|
136
203
|
|
|
137
|
-
#
|
|
138
|
-
|
|
204
|
+
# Chung Yeung Festival.
|
|
205
|
+
# 重陽節.
|
|
206
|
+
if self._year >= 1977:
|
|
207
|
+
dt_double_ninth = self._add_double_ninth_festival("Chung Yeung Festival")
|
|
208
|
+
self._add_observed(dt_double_ninth)
|
|
139
209
|
|
|
140
|
-
#
|
|
210
|
+
# National Day.
|
|
211
|
+
# 國慶日.
|
|
141
212
|
if self._year >= 1997:
|
|
142
|
-
|
|
213
|
+
name = "National Day"
|
|
214
|
+
oct_1 = self._add_holiday_oct_1(name)
|
|
215
|
+
self._add_observed(
|
|
216
|
+
oct_1,
|
|
217
|
+
name=name,
|
|
218
|
+
rule=WORKDAY_TO_NEXT_WORKDAY + SAT_SUN_TO_NEXT_WORKDAY
|
|
219
|
+
if oct_1 == mid_autumn_date or oct_1 == dt_double_ninth
|
|
220
|
+
else SUN_TO_NEXT_WORKDAY,
|
|
221
|
+
)
|
|
143
222
|
|
|
144
|
-
# Chinese
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
223
|
+
# Chinese Winter Solstice Festival.
|
|
224
|
+
# 冬節.
|
|
225
|
+
if WINTER_SOLSTICE in self.preferred_discretionary_holidays:
|
|
226
|
+
self._add_observed(
|
|
227
|
+
self._add_holiday("Chinese Winter Solstice Festival", self._winter_solstice_date)
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
if self._year >= 2024:
|
|
231
|
+
# 聖誕節後第一個周日.
|
|
232
|
+
self._add_observed(
|
|
233
|
+
self._add_christmas_day_two("The first weekday after Christmas Day")
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
# Christmas Day.
|
|
237
|
+
# 聖誕節.
|
|
238
|
+
if CHRISTMAS in self.preferred_discretionary_holidays:
|
|
239
|
+
self._add_observed(self._add_christmas_day("Christmas Day"))
|
|
240
|
+
|
|
241
|
+
def _populate_optional_holidays(self):
|
|
242
|
+
if self._year <= 1945:
|
|
243
|
+
return None
|
|
244
|
+
|
|
245
|
+
# General Holidays.
|
|
246
|
+
|
|
247
|
+
# The first day of January.
|
|
248
|
+
if self._is_sunday(JAN, 1):
|
|
249
|
+
# 一月一日翌日.
|
|
250
|
+
self._add_new_years_day_two("The day following the first day of January")
|
|
251
|
+
else:
|
|
252
|
+
# 一月一日.
|
|
253
|
+
self._add_new_years_day("The first day of January")
|
|
254
|
+
|
|
255
|
+
self._add_lunar_new_year(day_three_start_year=1968)
|
|
256
|
+
|
|
257
|
+
# Ching Ming Festival.
|
|
258
|
+
if self._year >= 1968:
|
|
259
|
+
dt_qingming = self._qingming_date
|
|
260
|
+
if self._is_sunday(dt_qingming) or dt_qingming == _timedelta(self._easter_sunday, +1):
|
|
261
|
+
# 清明節翌日.
|
|
262
|
+
self._add_holiday(
|
|
263
|
+
"The day following Ching Ming Festival", _timedelta(dt_qingming, +1)
|
|
264
|
+
)
|
|
159
265
|
else:
|
|
160
|
-
|
|
266
|
+
# 清明節.
|
|
267
|
+
self._add_qingming_festival("Ching Ming Festival")
|
|
268
|
+
|
|
269
|
+
# Good Friday.
|
|
270
|
+
# 耶穌受難節.
|
|
271
|
+
self._add_good_friday("Good Friday")
|
|
272
|
+
|
|
273
|
+
# The day following Good Friday.
|
|
274
|
+
# 耶穌受難節翌日.
|
|
275
|
+
self._add_holy_saturday("The day following Good Friday")
|
|
276
|
+
|
|
277
|
+
# Easter Monday.
|
|
278
|
+
if self._year >= 1968 and dt_qingming == self._easter_sunday:
|
|
279
|
+
# 復活節星期一翌日.
|
|
280
|
+
self._add_holiday_2_days_past_easter("The day following Easter Monday")
|
|
161
281
|
else:
|
|
162
|
-
|
|
282
|
+
# 復活節星期一.
|
|
283
|
+
self._add_easter_monday("Easter Monday")
|
|
163
284
|
|
|
164
|
-
#
|
|
165
|
-
self.
|
|
285
|
+
# The Birthday of the Buddha.
|
|
286
|
+
if self._year >= 1999:
|
|
287
|
+
dt_birthday_of_buddha = self._chinese_calendar.buddha_birthday_date(self._year)[0]
|
|
288
|
+
if self._is_sunday(dt_birthday_of_buddha):
|
|
289
|
+
# 佛誕翌日.
|
|
290
|
+
self._add_holiday(
|
|
291
|
+
"The day following the Birthday of the Buddha",
|
|
292
|
+
_timedelta(dt_birthday_of_buddha, +1),
|
|
293
|
+
)
|
|
294
|
+
else:
|
|
295
|
+
# 佛誕.
|
|
296
|
+
self._add_chinese_birthday_of_buddha("The Birthday of the Buddha")
|
|
166
297
|
|
|
167
|
-
#
|
|
168
|
-
if self._year >=
|
|
169
|
-
self.
|
|
298
|
+
# Labour Day.
|
|
299
|
+
if self._year >= 1999:
|
|
300
|
+
if self._is_sunday(MAY, 1):
|
|
301
|
+
# 勞動節翌日.
|
|
302
|
+
self._add_labor_day_two("The day following Labour Day")
|
|
303
|
+
else:
|
|
304
|
+
# 勞動節.
|
|
305
|
+
self._add_labor_day("Labour Day")
|
|
306
|
+
|
|
307
|
+
# Tuen Ng Festival.
|
|
308
|
+
if self._year >= 1968:
|
|
309
|
+
dt_dragon_boat = self._chinese_calendar.dragon_boat_date(self._year)[0]
|
|
310
|
+
if self._is_sunday(dt_dragon_boat):
|
|
311
|
+
# 端午節翌日.
|
|
312
|
+
self._add_holiday(
|
|
313
|
+
"The day following Tuen Ng Festival", _timedelta(dt_dragon_boat, +1)
|
|
314
|
+
)
|
|
315
|
+
else:
|
|
316
|
+
# 端午節.
|
|
317
|
+
self._add_dragon_boat_festival("Tuen Ng Festival")
|
|
170
318
|
|
|
171
|
-
|
|
172
|
-
|
|
319
|
+
# Hong Kong Special Administrative Region Establishment Day.
|
|
320
|
+
if self._year >= 1997:
|
|
321
|
+
if self._is_sunday(JUL, 1):
|
|
322
|
+
# 香港特別行政區成立紀念日翌日.
|
|
323
|
+
self._add_holiday_jul_2(
|
|
324
|
+
"The day following Hong Kong Special Administrative Region Establishment Day"
|
|
325
|
+
)
|
|
326
|
+
else:
|
|
327
|
+
# 香港特別行政區成立紀念日.
|
|
328
|
+
self._add_holiday_jul_1(
|
|
329
|
+
"Hong Kong Special Administrative Region Establishment Day"
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
mid_autumn_date = self._add_mid_autumn()
|
|
333
|
+
|
|
334
|
+
# Chung Yeung Festival.
|
|
335
|
+
if self._year >= 1968:
|
|
336
|
+
dt_double_ninth = self._chinese_calendar.double_ninth_date(self._year)[0]
|
|
337
|
+
if self._is_sunday(dt_double_ninth):
|
|
338
|
+
# 重陽節翌日.
|
|
339
|
+
self._add_holiday(
|
|
340
|
+
"The day following Chung Yeung Festival", _timedelta(dt_double_ninth, +1)
|
|
341
|
+
)
|
|
342
|
+
else:
|
|
343
|
+
# 重陽節.
|
|
344
|
+
self._add_double_ninth_festival("Chung Yeung Festival")
|
|
173
345
|
|
|
174
|
-
#
|
|
346
|
+
# National Day.
|
|
347
|
+
if self._year >= 1997:
|
|
348
|
+
dt = date(self._year, OCT, 1)
|
|
349
|
+
if self._is_sunday(dt) or dt == mid_autumn_date or dt == dt_double_ninth:
|
|
350
|
+
# 國慶日翌日.
|
|
351
|
+
self._add_holiday("The day following National Day", self._get_next_workday(dt))
|
|
352
|
+
else:
|
|
353
|
+
# 國慶日.
|
|
354
|
+
self._add_holiday_oct_1("National Day")
|
|
355
|
+
if self._year in {1997, 1998}:
|
|
356
|
+
# 國慶日翌日.
|
|
357
|
+
self._add_holiday_oct_2("The day following National Day")
|
|
358
|
+
|
|
359
|
+
# Christmas Day.
|
|
360
|
+
# 聖誕節.
|
|
175
361
|
name = "Christmas Day"
|
|
176
|
-
|
|
177
|
-
|
|
362
|
+
# 聖誕節後第一個周日.
|
|
363
|
+
first_after_christmas = "The first weekday after Christmas Day"
|
|
364
|
+
# 聖誕節後第二個周日.
|
|
365
|
+
second_after_christmas = "The second weekday after Christmas Day"
|
|
178
366
|
dt_christmas = self._christmas_day
|
|
179
|
-
if self.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
self._add_christmas_day_three(first_after_christmas)
|
|
186
|
-
else:
|
|
187
|
-
self._add_christmas_day(name)
|
|
188
|
-
self._add_christmas_day_two(first_after_christmas)
|
|
367
|
+
if self._is_sunday(dt_christmas):
|
|
368
|
+
self._add_christmas_day_two(first_after_christmas)
|
|
369
|
+
self._add_christmas_day_three(second_after_christmas)
|
|
370
|
+
elif self._is_saturday(dt_christmas):
|
|
371
|
+
self._add_christmas_day(name)
|
|
372
|
+
self._add_christmas_day_three(first_after_christmas)
|
|
189
373
|
else:
|
|
190
374
|
self._add_christmas_day(name)
|
|
191
375
|
self._add_christmas_day_two(first_after_christmas)
|
|
192
376
|
|
|
193
|
-
# Previous holidays
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
377
|
+
# Previous holidays.
|
|
378
|
+
|
|
379
|
+
# Queen's Birthday.
|
|
380
|
+
# 英女皇壽辰.
|
|
381
|
+
if 1952 <= self._year <= 1996:
|
|
382
|
+
name = "Queen's Birthday"
|
|
383
|
+
if self._year >= 1983:
|
|
384
|
+
self._add_holiday_2nd_sat_of_jun(name)
|
|
385
|
+
self._add_holiday_2_days_past_2nd_sat_of_jun(name)
|
|
386
|
+
else:
|
|
387
|
+
if self._year != 1952:
|
|
388
|
+
self._add_holiday_apr_21(name)
|
|
389
|
+
else:
|
|
390
|
+
self._add_holiday_jun_5(name)
|
|
391
|
+
|
|
392
|
+
if self._year <= 1967:
|
|
393
|
+
# Monday after Pentecost.
|
|
394
|
+
# 靈降臨節後星期一.
|
|
395
|
+
self._add_whit_monday("Monday after Pentecost")
|
|
396
|
+
|
|
397
|
+
# National Day of the Republic of China.
|
|
398
|
+
# 中華民國國慶日.
|
|
399
|
+
self._add_holiday_2nd_mon_of_oct("National Day of the Republic of China")
|
|
400
|
+
|
|
401
|
+
# Monday after Peace Memorial Day.
|
|
402
|
+
# 和平紀念日後星期一.
|
|
403
|
+
self._add_holiday_1_day_past_2nd_sun_of_nov("Monday after Peace Memorial Day")
|
|
197
404
|
|
|
198
405
|
if self._year <= 1996:
|
|
199
|
-
# Anniversary of the liberation of Hong Kong
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
406
|
+
# Anniversary of the liberation of Hong Kong.
|
|
407
|
+
# 重光紀念日.
|
|
408
|
+
name = "Anniversary of the liberation of Hong Kong"
|
|
409
|
+
if self._year >= 1983:
|
|
410
|
+
self._add_holiday_last_mon_of_aug(name)
|
|
411
|
+
self._add_holiday_2_days_prior_last_mon_of_aug(name)
|
|
412
|
+
elif self._year >= 1968:
|
|
413
|
+
self._add_holiday_1st_mon_of_aug(name)
|
|
414
|
+
self._add_holiday_last_mon_of_aug(name)
|
|
415
|
+
else:
|
|
416
|
+
self._add_holiday_aug_30(name)
|
|
417
|
+
|
|
418
|
+
@property
|
|
419
|
+
def _winter_solstice_date(self) -> Tuple[int, int]:
|
|
420
|
+
# This approximation is reliable for 1952-2099 years.
|
|
421
|
+
if (
|
|
422
|
+
(self._year % 4 == 0 and self._year >= 1988)
|
|
423
|
+
or (self._year % 4 == 1 and self._year >= 2021)
|
|
424
|
+
or (self._year % 4 == 2 and self._year >= 2058)
|
|
425
|
+
or (self._year % 4 == 3 and self._year >= 2091)
|
|
426
|
+
):
|
|
427
|
+
day = 21
|
|
428
|
+
else:
|
|
429
|
+
day = 22
|
|
430
|
+
return DEC, day
|
|
208
431
|
|
|
209
432
|
|
|
210
433
|
class HK(HongKong):
|
|
@@ -216,14 +439,56 @@ class HKG(HongKong):
|
|
|
216
439
|
|
|
217
440
|
|
|
218
441
|
class HongKongStaticHolidays:
|
|
442
|
+
# 英國王儲查理斯王子與戴安娜婚禮.
|
|
443
|
+
wedding_of_charles_and_diana = "Wedding of Prince Charles and Diana"
|
|
444
|
+
|
|
445
|
+
# 英女王伊利沙伯二世伉儷訪港的第二天.
|
|
446
|
+
queen_visit_hk = "Second day of Queen Elizabeth II and her husband's visit to Hong Kong"
|
|
447
|
+
|
|
448
|
+
# 英女皇壽辰.
|
|
449
|
+
queen_birthday = "Queen's Birthday"
|
|
450
|
+
|
|
451
|
+
# 香港特別行政區成立紀念日翌日.
|
|
452
|
+
day_following_hksar_establishment_day = (
|
|
453
|
+
"The day following Hong Kong Special Administrative Region Establishment Day"
|
|
454
|
+
)
|
|
455
|
+
|
|
456
|
+
# 中國人民抗日戰爭勝利70周年紀念日.
|
|
457
|
+
victory_70th_anniversary = (
|
|
458
|
+
"The 70th anniversary day of the victory of the Chinese "
|
|
459
|
+
"people's war of resistance against Japanese aggression"
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
# 抗日戰爭勝利紀念日.
|
|
463
|
+
war_victory_day = "Sino-Japanese War Victory Day"
|
|
464
|
+
|
|
465
|
+
# 國慶日翌日.
|
|
466
|
+
day_following_national_day = "The day following National Day"
|
|
467
|
+
|
|
468
|
+
# 額外公眾假期.
|
|
469
|
+
additional_public_holiday = "Additional public holiday"
|
|
470
|
+
|
|
219
471
|
special_public_holidays = {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
472
|
+
1981: (JUL, 29, wedding_of_charles_and_diana),
|
|
473
|
+
1986: (OCT, 22, queen_visit_hk),
|
|
474
|
+
1997: (JUL, 2, day_following_hksar_establishment_day),
|
|
475
|
+
2015: (SEP, 3, victory_70th_anniversary),
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
special_optional_holidays = {
|
|
479
|
+
1981: (JUL, 29, wedding_of_charles_and_diana),
|
|
480
|
+
1986: (OCT, 22, queen_visit_hk),
|
|
481
|
+
1997: (
|
|
482
|
+
(JUN, 28, queen_birthday),
|
|
483
|
+
(JUN, 30, queen_birthday),
|
|
484
|
+
(JUL, 2, day_following_hksar_establishment_day),
|
|
485
|
+
(AUG, 18, war_victory_day),
|
|
486
|
+
(OCT, 2, day_following_national_day),
|
|
487
|
+
),
|
|
488
|
+
1998: (
|
|
489
|
+
(AUG, 17, war_victory_day),
|
|
490
|
+
(OCT, 2, day_following_national_day),
|
|
228
491
|
),
|
|
492
|
+
1999: (DEC, 31, additional_public_holiday),
|
|
493
|
+
2015: (SEP, 3, victory_70th_anniversary),
|
|
229
494
|
}
|