Files
Time-Series-Analysis/venv/lib/python3.11/site-packages/holidays/countries/taiwan.py
2025-08-01 04:33:03 -04:00

438 lines
18 KiB
Python

# holidays
# --------
# A fast, efficient Python library for generating country, province and state
# specific sets of holidays on the fly. It aims to make determining whether a
# specific date is a holiday as fast and flexible as possible.
#
# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
# dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
# ryanss <ryanssdev@icloud.com> (c) 2014-2017
# Website: https://github.com/vacanza/holidays
# License: MIT (see LICENSE file)
from datetime import date
from gettext import gettext as tr
from typing import Optional
from holidays.calendars.gregorian import (
JAN,
FEB,
MAR,
APR,
MAY,
JUN,
SEP,
OCT,
DEC,
MON,
TUE,
WED,
THU,
FRI,
SAT,
SUN,
)
from holidays.constants import GOVERNMENT, OPTIONAL, PUBLIC, SCHOOL, WORKDAY
from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
ObservedRule,
SAT_TO_PREV_WORKDAY,
SUN_TO_NEXT_WORKDAY,
SAT_SUN_TO_NEXT_WORKDAY,
)
CHILDRENS_DAY_RULE = ObservedRule({MON: +1, TUE: -1, WED: -1, THU: +1, FRI: -1, SAT: -1, SUN: -2})
class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays, StaticHolidays):
"""Taiwan holidays.
References:
* <https://zh.wikipedia.org/wiki/中華民國節日與歲時列表>
* <https://en.wikipedia.org/wiki/Public_holidays_in_Taiwan>
Commemorative Day and Day Implementation Method Amendments:
* [Ministry of Interior (87) Order No. 8706459](https://web.archive.org/web/20250501035936/https://zh.wikisource.org/wiki/紀念日及節日實施辦法_(民國87年))
* [Ministry of Interior (88) Order No. 8897074](https://web.archive.org/web/20250429134107/https://zh.wikisource.org/wiki/紀念日及節日實施辦法_(民國88年))
* [Ministry of Interior (89) Order No. 8972185](https://web.archive.org/web/20250429134119/https://zh.wikisource.org/wiki/紀念日及節日實施辦法_(民國89年2月))
* [Ministry of Interior (89) Order No. 8962562](https://web.archive.org/web/20250429134023/https://zh.wikisource.org/wiki/紀念日及節日實施辦法_(民國89年12月))
* [Ministry of Interior Order No. 0950045320](https://web.archive.org/web/20240916001724/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20060309&lser=001)
* [Ministry of Interior Order No. 0960110433](https://web.archive.org/web/20240915222212/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20070711&lser=001)
* [Ministry of Interior Order No. 0960131407](https://web.archive.org/web/20240915222212/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20070711&lser=001)
* [Ministry of Interior Order No. 0960155673](https://web.archive.org/web/20240916000901/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20071003&lser=001)
* [Ministry of Interior Order No. 0990212117](https://web.archive.org/web/20240916004712/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20101102&lser=001)
* [Ministry of Interior Order No. 1010307327 and 1030128812](https://web.archive.org/web/20240919205138/https://law.moj.gov.tw/LawClass/LawOldVer.aspx?pcode=D0020033&lnndate=20120925&lser=001)
* [Ministry of Interior Order No. 1030182404](https://web.archive.org/web/20250227171607/https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=D0020033)
* [Decree No. 11400053171](https://web.archive.org/web/20250602210918/https://law.moj.gov.tw/News/newsdetail.aspx?msgid=191745)
Checked With:
* [DGPA Work Calendar (1998-2025; Chinese)](https://web.archive.org/web/20250307201828/https://www.dgpa.gov.tw/informationlist?uid=30)
* [DGPA Work Calendar (2001-2025; English)](https://web.archive.org/web/20240606012108/http://www.dgpa.gov.tw/en/informationlist?uid=353)
"""
country = "TW"
# %s (observed).
observed_label = tr("%s(慶祝)")
default_language = "zh_TW"
supported_categories = (GOVERNMENT, OPTIONAL, PUBLIC, SCHOOL, WORKDAY)
supported_languages = ("en_US", "th", "zh_CN", "zh_TW")
# Ministry of Interior (87) Order No. 8706459.
start_year = 1998
def __init__(self, *args, **kwargs):
ChineseCalendarHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, TaiwanStaticHolidays)
kwargs.setdefault("observed_rule", SAT_TO_PREV_WORKDAY + SUN_TO_NEXT_WORKDAY)
super().__init__(*args, **kwargs)
def _populate_observed(
self, dts: set[date], rule: Optional[ObservedRule] = None, since: int = 2015
) -> None:
"""
Taiwan's General Observance Rule first started in 2015 as per
decreed in 內政部台內民字第1030182404號令.
Children's Day Special Observance Rule first started in 2012 as per
decreed in 內政部台內民字第1010307327號令 - as this doesn't affect 2011 ones,
as such the logic is simplified.
"""
if self._year < since:
return None
# Children's Day.
childrens_day = self.tr("兒童節")
for dt in sorted(dts):
names = self.get_list(dt)
for name in names:
self._add_observed(
dt,
name,
# Children's Day falls on the same day as Tomb-Sweeping Day.
CHILDRENS_DAY_RULE if name == childrens_day and len(names) > 1 else rule,
)
def _populate_public_holidays(self):
dts_observed = set()
dts_observed_forward = set()
# Founding Day of the Republic of China.
name = tr("中華民國開國紀念日")
dts_observed.add(self._add_new_years_day(name))
if self._year >= 2015:
self._add_observed(self._next_year_new_years_day, name=name)
# Chinese New Year's Eve.
name = tr("農曆除夕")
if self._year >= 2026:
dts_observed_forward.add(self._add_chinese_day_before_new_years_eve(name))
dts_observed_forward.add(self._add_chinese_new_years_eve(name))
# Chinese New Year.
name = tr("春節")
dts_observed_forward.add(self._add_chinese_new_years_day(name))
dts_observed_forward.add(self._add_chinese_new_years_day_two(name))
dts_observed_forward.add(self._add_chinese_new_years_day_three(name))
# Peace Memorial Day.
dts_observed.add(self._add_holiday_feb_28(tr("和平紀念日")))
if self._year >= 2011:
# Children's Day.
dts_observed.add(self._add_holiday_apr_4(tr("兒童節")))
# Tomb-Sweeping Day.
dts_observed.add(self._add_qingming_festival(tr("民族掃墓節")))
if self._year >= 2026:
# Labor Day.
self._add_labor_day(tr("勞動節"))
# Dragon Boat Festival.
dts_observed.add(self._add_dragon_boat_festival(tr("端午節")))
# Mid-Autumn Festival.
dts_observed.add(self._add_mid_autumn_festival(tr("中秋節")))
if self._year >= 2025:
# Confucius' Birthday.
self._add_holiday_sep_28(tr("孔子誕辰紀念日"))
# National Day.
dts_observed.add(self._add_holiday_oct_10(tr("國慶日")))
if self._year >= 2025:
# Taiwan Restoration and Guningtou Victory Memorial Day.
self._add_holiday_oct_25(tr("臺灣光復暨金門古寧頭大捷紀念日"))
# Constitution Day.
self._add_holiday_dec_25(tr("行憲紀念日"))
if self.observed:
self._populate_observed(dts_observed)
# While Chinese New Year special observances rule weren't officially decreed
# until 2015, this was de facto implemented by the DGPA since at least 2003.
self._populate_observed(dts_observed_forward, rule=SAT_SUN_TO_NEXT_WORKDAY, since=2003)
def _populate_school_holidays(self):
if self._year <= 2000:
# Founding Day of the Republic of China.
self._add_new_years_day_two(tr("中華民國開國紀念日"))
# Confucius' Birthday.
self._add_holiday_sep_28(tr("孔子誕辰紀念日"))
# Taiwan Retrocession Day.
self._add_holiday_oct_25(tr("臺灣光復節"))
# Late President Chiang Kai-shek's Birthday.
self._add_holiday_oct_31(tr("先總統 蔣公誕辰紀念日"))
# Dr. Sun Yat-sen's Birthday.
self._add_holiday_nov_12(tr("國父誕辰紀念日"))
# Constitution Day.
self._add_holiday_dec_25(tr("行憲紀念日"))
def _populate_government_holidays(self):
self._populate_school_holidays()
if self._year <= 2000:
# Revolutionary Martyrs Memorial Day.
self._add_holiday_mar_29(tr("革命先烈紀念日"))
def _populate_optional_holidays(self):
if self._year <= 2025:
# Labor Day.
self._add_labor_day(tr("勞動節"))
# Armed Forces Day.
self._add_holiday_sep_3(tr("軍人節"))
def _populate_workday_holidays(self):
# Dr. Sun Yat-sen's Memorial Day.
self._add_holiday_mar_12(tr("國父逝世紀念日"))
# Arbor Day.
self._add_holiday_mar_12(tr("植樹節"))
# Youth Day.
self._add_holiday_mar_29(tr("青年節"))
# Teacher's Day.
self._add_holiday_sep_28(tr("教師節"))
# Chinese Cultural Renaissance Day.
self._add_holiday_nov_12(tr("中華文化復興節"))
# Women's Day.
self._add_womens_day(tr("婦女節"))
if self._year <= 2007:
# Late President Chiang Kai-shek's Memorial Day.
self._add_qingming_festival(tr("先總統蔣公逝世紀念日"))
if self._year <= 2010:
# Children's Day.
self._add_holiday_apr_4(tr("兒童節"))
if self._year >= 2000:
# The Buddha's Birthday.
self._add_chinese_birthday_of_buddha(tr("佛陀誕辰紀念日"))
if self._year >= 2001:
# Taoism Day.
self._add_chinese_new_years_day(tr("道教節"))
# Revolutionary Martyrs Memorial Day.
self._add_holiday_mar_29(tr("革命先烈紀念日"))
if self._year <= 2024:
# Confucius' Birthday.
self._add_holiday_sep_28(tr("孔子誕辰紀念日"))
# Taiwan Retrocession Day.
self._add_holiday_oct_25(tr("臺灣光復節"))
# Dr. Sun Yat-sen's Birthday.
self._add_holiday_nov_12(tr("國父誕辰紀念日"))
if self._year <= 2024:
# Constitution Day.
self._add_holiday_dec_25(tr("行憲紀念日"))
if self._year <= 2006:
# Late President Chiang Kai-shek's Birthday.
self._add_holiday_oct_31(tr("先總統 蔣公誕辰紀念日"))
if self._year >= 2006:
# Anti-Aggression Day.
self._add_holiday_mar_14(tr("反侵略日"))
if self._year >= 2008:
# Commemoration Day of the Lifting of Martial Law.
self._add_holiday_jul_15(tr("解嚴紀念日"))
# Taiwan United Nations Day.
self._add_united_nations_day(tr("臺灣聯合國日"))
class TW(Taiwan):
pass
class TWN(Taiwan):
pass
class TaiwanStaticHolidays:
"""Taiwan special holidays.
DGPA, Executive Yuan Work Calendars:
* [1998](https://web.archive.org/web/20240119034602/https://www.dgpa.gov.tw/information?pid=4979&uid=30)
* [1999](https://web.archive.org/web/20240119034606/https://www.dgpa.gov.tw/information?pid=4978&uid=30)
* [2000](https://web.archive.org/web/20231230164623/https://www.dgpa.gov.tw/information?uid=30&pid=4977)
* [2001](https://web.archive.org/web/20220809165413/https://www.dgpa.gov.tw/en/information?uid=353&pid=6199)
* [2002](https://web.archive.org/web/20220809163821/https://www.dgpa.gov.tw/en/information?uid=353&pid=6198)
* [2003](https://web.archive.org/web/20220809161706/https://www.dgpa.gov.tw/en/information?uid=353&pid=6197)
* [2004](https://web.archive.org/web/20220809175339/https://www.dgpa.gov.tw/en/information?uid=353&pid=6196)
* [2005](https://web.archive.org/web/20220809173619/https://www.dgpa.gov.tw/en/information?uid=353&pid=6195)
* [2006](https://web.archive.org/web/20250427175035/https://www.dgpa.gov.tw/en/information?uid=353&pid=6192)
* [2007](https://web.archive.org/web/20250427175157/https://www.dgpa.gov.tw/en/information?uid=353&pid=6194)
* [2008](https://web.archive.org/web/20250427175031/https://www.dgpa.gov.tw/en/information?uid=353&pid=6191)
* [2009](https://web.archive.org/web/20250427175008/https://www.dgpa.gov.tw/en/information?uid=353&pid=6190)
* [2010](https://web.archive.org/web/20240913193941/https://www.dgpa.gov.tw/en/information?pid=6189&uid=353)
* [2011](https://web.archive.org/web/20250427175006/https://www.dgpa.gov.tw/en/information?uid=353&pid=6188)
* [2012](https://web.archive.org/web/20250427175006/https://www.dgpa.gov.tw/en/information?uid=353&pid=6187)
* [2013](https://web.archive.org/web/20250427174956/https://www.dgpa.gov.tw/en/information?uid=353&pid=6186)
* [2014](https://web.archive.org/web/20220809133242/https://www.dgpa.gov.tw/en/information?uid=353&pid=6183)
* [2015](https://web.archive.org/web/20220809133240/https://www.dgpa.gov.tw/en/information?uid=353&pid=6182)
* [2016](https://web.archive.org/web/20220809133238/https://www.dgpa.gov.tw/en/information?uid=353&pid=6180)
* [2017](https://web.archive.org/web/20220809133236/https://www.dgpa.gov.tw/en/information?uid=353&pid=6178)
* [2018](https://web.archive.org/web/20240518122217/https://www.dgpa.gov.tw/en/information?uid=353&pid=7730)
* [2019](https://web.archive.org/web/20240422121421/http://www.dgpa.gov.tw/en/information?uid=353&pid=8178)
* [2020](https://web.archive.org/web/20240914094053/https://www.dgpa.gov.tw/en/information?pid=9724&uid=353)
* [2021](https://web.archive.org/web/20240615041915/https://www.dgpa.gov.tw/en/information?uid=353&pid=10181)
* [2022](https://web.archive.org/web/20220809133226/https://www.dgpa.gov.tw/en/information?uid=353&pid=10659)
* [2023](https://web.archive.org/web/20220809133225/https://www.dgpa.gov.tw/en/information?uid=353&pid=11016)
* [2024](https://web.archive.org/web/20250414165829/https://www.dgpa.gov.tw/en/information?uid=353&pid=11402)
* [2025](https://web.archive.org/web/20250121091032/https://www.dgpa.gov.tw/en/information?uid=353&pid=11979)
"""
# Date format (see strftime() Format Codes).
substituted_date_format = tr("%Y-%m-%d")
# Day off (substituted from %s).
substituted_label = tr("休息日(%s日起取代)")
# Women's Day.
womens_day = tr("婦女節")
# Children's Day.
childrens_day = tr("兒童節")
special_public_holidays = {
2000: (APR, 3, APR, 8),
2001: (JAN, 22, JAN, 20),
2005: (FEB, 7, FEB, 5),
2006: (OCT, 9, OCT, 14),
2007: (
(FEB, 23, MAR, 3),
(APR, 6, APR, 14),
(JUN, 18, JUN, 23),
(SEP, 24, SEP, 29),
),
2009: (
(JAN, 2, JAN, 10),
(JAN, 30, JAN, 17),
(MAY, 29, JUN, 6),
),
2010: (FEB, 19, FEB, 6),
2012: (
(JAN, 27, FEB, 4),
(FEB, 27, MAR, 3),
(DEC, 31, DEC, 22),
),
2013: (
(FEB, 15, FEB, 23),
(SEP, 20, SEP, 14),
),
2015: (JAN, 2, DEC, 27, 2014),
2016: (
(FEB, 12, JAN, 30),
(JUN, 10, JUN, 4),
(SEP, 16, SEP, 10),
),
2017: (
(FEB, 27, FEB, 18),
(MAY, 29, JUN, 3),
(OCT, 9, SEP, 30),
),
2018: (
(APR, 6, MAR, 31),
(DEC, 31, DEC, 22),
),
2019: (
(FEB, 8, JAN, 19),
(MAR, 1, FEB, 23),
(OCT, 11, OCT, 5),
),
2020: (
(JAN, 23, FEB, 15),
(JUN, 26, JUN, 20),
(OCT, 2, SEP, 26),
),
2021: (
(FEB, 10, FEB, 20),
(SEP, 20, SEP, 11),
),
2022: (FEB, 4, JAN, 22),
2023: (
(JAN, 20, JAN, 7),
(JAN, 27, FEB, 4),
(FEB, 27, FEB, 18),
(APR, 3, MAR, 25),
(JUN, 23, JUN, 17),
(OCT, 9, SEP, 23),
),
2024: (FEB, 8, FEB, 17),
2025: (JAN, 27, FEB, 8),
}
# Prior to 2001, Women's Day and Children's Day holidays were given on
# the day before the Tomb-Sweeping Day.
special_optional_holidays_observed = {
1998: (
(APR, 4, childrens_day),
(APR, 4, womens_day),
),
1999: (
(APR, 4, childrens_day),
(APR, 4, womens_day),
),
2000: (
(APR, 3, childrens_day),
(APR, 3, womens_day),
# Armed Forces Day.
(SEP, 4, tr("軍人節")),
),
}
# The Buddha's Birthday was observed on 2nd Sunday of May in 2000.
special_public_holidays_observed = {
1998: (
# Chinese New Year.
(JAN, 31, tr("春節")),
# Tomb-Sweeping Day.
(APR, 6, tr("民族掃墓節")),
),
1999: (
# Founding Day of the Republic of China.
(JAN, 2, tr("中華民國開國紀念日")),
# Dragon Boat Festival.
(JUN, 19, tr("端午節")),
),
# The Buddha's Birthday.
2000: (MAY, 14, tr("佛陀誕辰紀念日")),
2013: (APR, 5, childrens_day),
}