| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207 |
- # Copyright (c) 2017-present, Facebook, Inc.
- # All rights reserved.
- #
- # This source code is licensed under the BSD-style license found in the
- # LICENSE file in the root directory of this source tree. An additional grant
- # of patent rights can be found in the PATENTS file in the same directory.
- from __future__ import absolute_import
- from __future__ import division
- from __future__ import print_function
- from __future__ import unicode_literals
- from holidays import HolidayBase, MONDAY, WEEKEND, rd, easter
- from lunardate import LunarDate
- from calendar import Calendar
- from datetime import date, timedelta
- from convertdate.islamic import to_gregorian, from_gregorian
- import warnings
- # Official public holidays at a country level
- # ------------ Holidays in Brazil---------------------
- class Brazil(HolidayBase):
- """
- Implement public holidays in Brazil
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Brazil
- """
- def __init__(self, **kwargs):
- self.country = "BR"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- if not self.observed and date(year, 1, 1).weekday() in WEEKEND:
- pass
- else:
- self[date(year, 1, 1)] = "New Year's Day"
- # Tiradentes
- self[date(year, 4, 21)] = "Tiradentes"
- # Worker's Day
- self[date(year, 5, 1)] = "Worker's Day"
- # Independence Day
- self[date(year, 9, 7)] = "Independence Day"
- # Our Lady of the Apparition
- self[date(year, 10, 12)] = "Our Lady of the Apparition"
- # All Souls' Day
- self[date(year, 11, 2)] = "All Souls' Day"
- # Republic Proclamation Day
- self[date(year, 11, 5)] = "Republic Proclamation Day"
- # Christmas
- self[date(year, 12, 25)] = "Christmas"
- class BR(Brazil):
- pass
- # ------------ Holidays in Indonesia---------------------
- class Indonesia(HolidayBase):
- """
- Implement public holidays in Indonesia
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Indonesia
- Please note: Indonesia is a multi-cultural community and we only implement
- the national wide public holidays.
- """
- def __init__(self, **kwargs):
- self.country = "ID"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- if not self.observed and date(year, 1, 1).weekday() in WEEKEND:
- pass
- else:
- self[date(year, 1, 1)] = "New Year's Day"
- # Chinese New Year/ Spring Festival
- name = "Chinese New Year"
- self[LunarDate(year, 1, 1).toSolarDate()] = name
- # Day of Silence / Nyepi
- # Note:
- # This holiday is determined by Balinese calendar, which is not currently
- # available. Only hard coded version of this holiday from 2009 to 2019
- # is available.
- warning_msg = "We only support Nyepi holiday from 2009 to 2019"
- warnings.warn(warning_msg, Warning)
- name = "Day of Silence/ Nyepi"
- if year == 2009:
- self[date(year, 3, 26)] = name
- elif year == 2010:
- self[date(year, 3, 16)] = name
- elif year == 2011:
- self[date(year, 3, 5)] = name
- elif year == 2012:
- self[date(year, 3, 23)] = name
- elif year == 2013:
- self[date(year, 3, 12)] = name
- elif year == 2014:
- self[date(year, 3, 31)] = name
- elif year == 2015:
- self[date(year, 3, 21)] = name
- elif year == 2016:
- self[date(year, 3, 9)] = name
- elif year == 2017:
- self[date(year, 3, 28)] = name
- elif year == 2018:
- self[date(year, 3, 17)] = name
- elif year == 2019:
- self[date(year, 3, 7)] = name
- else:
- pass
- # Ascension of the Prophet
- islam_year = from_gregorian(year, 3, 17)[0]
- y, m, d = to_gregorian(islam_year, 7, 27)
- name = "Ascension of the Prophet"
- self[date(year, m, d)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Ascension of Jesus Christ
- name = "Ascension of Jesus"
- hdate = easter(year) + rd(days=+39)
- self[hdate] = name
- # Buddha's Birthday
- name = "Buddha's Birthday"
- self[LunarDate(year, 4, 15).toSolarDate()] = name
- # Pancasila Day, since 2017
- if year >= 2017:
- name = "Pancasila Day"
- self[date(year, 6, 1)] = name
- # Eid al-Fitr
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- y2, m2, d2 = to_gregorian(islam_year, 10, 2)
- name = "Eid al-Fitr"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- # Independence Day
- name = "Independence Day"
- self[date(year, 8, 17)] = name
- # Feast of the Sacrifice
- islam_year = from_gregorian(year, 8, 22)[0]
- y, m, d = to_gregorian(islam_year, 12, 10)
- name = "Feast of the Sacrifice"
- self[date(year, m, d)] = name
- # Islamic New Year
- islam_year = from_gregorian(year, 9, 11)[0]
- y, m, d = to_gregorian(islam_year + 1, 1, 1)
- name = "Islamic New Year"
- self[date(year, m, d)] = name
- # Birth of the Prophet
- islam_year = from_gregorian(year, 11, 20)[0]
- y, m, d = to_gregorian(islam_year + 1, 3, 12)
- name = "Birth of the Prophet"
- self[date(year, m, d)] = name
- # Christmas
- self[date(year, 12, 25)] = "Christmas"
- class ID(Indonesia):
- pass
- # ------------ Holidays in India---------------------
- class India(HolidayBase):
- """
- Implement public holidays in India
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_India
- Please note:
- India is a culturally diverse and fervent society, celebrate various
- holidays and festivals. We only implement the holidays that **all states
- and territories** celebrate.
- """
- def __init__(self, **kwargs):
- self.country = "IN"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # --------------------------------
- # Three national days
- # Republic Day
- # Independence Day
- # Gandhi Jayanti
- # --------------------------------
- # Republic Day
- name = "Republic Day"
- self[date(year, 1, 26)] = name
- # Independence Day
- name = "Independence Day"
- self[date(year, 8, 15)] = name
- # Gandhi Jayanti
- name = "Gandhi Jayanti"
- self[date(year, 10, 2)] = name
- # --------------------------------
- # Hindo holidays
- # Diwali
- # Holi
- # --------------------------------
- # Diwali, Holi
- # http://www.theholidayspot.com/diwali/calendar.htm
- # https://www.timeanddate.com/holidays/india/diwali?starty=
- # https://www.infoplease.com/calendar-holidays/major-holidays/
- warning_msg = "We only support Diwali and Holi holidays from 2010 to 2025"
- warnings.warn(warning_msg, Warning)
- name1 = "Diwali"
- name2 = "Holi"
- if year == 2010:
- self[date(year, 12, 5)] = name1
- self[date(year, 2, 28)] = name2
- elif year == 2011:
- self[date(year, 10, 26)] = name1
- self[date(year, 3, 19)] = name2
- elif year == 2012:
- self[date(year, 11, 13)] = name1
- self[date(year, 3, 8)] = name2
- elif year == 2013:
- self[date(year, 11, 3)] = name1
- self[date(year, 3, 26)] = name2
- elif year == 2014:
- self[date(year, 10, 23)] = name1
- self[date(year, 3, 17)] = name2
- elif year == 2015:
- self[date(year, 11, 11)] = name1
- self[date(year, 3, 6)] = name2
- elif year == 2016:
- self[date(year, 10, 30)] = name1
- self[date(year, 3, 24)] = name2
- elif year == 2017:
- self[date(year, 10, 19)] = name1
- self[date(year, 3, 13)] = name2
- elif year == 2018:
- self[date(year, 11, 7)] = name1
- self[date(year, 3, 2)] = name2
- elif year == 2019:
- self[date(year, 10, 27)] = name1
- self[date(year, 3, 21)] = name2
- elif year == 2020:
- self[date(year, 11, 14)] = name1
- self[date(year, 3, 9)] = name2
- elif year == 2021:
- self[date(year, 11, 4)] = name1
- self[date(year, 3, 28)] = name2
- elif year == 2022:
- self[date(year, 10, 24)] = name1
- self[date(year, 3, 18)] = name2
- elif year == 2023:
- self[date(year, 10, 12)] = name1
- self[date(year, 3, 7)] = name2
- elif year == 2024:
- self[date(year, 11, 1)] = name1
- self[date(year, 3, 25)] = name2
- elif year == 2025:
- self[date(year, 10, 21)] = name1
- self[date(year, 3, 14)] = name2
- else:
- pass
- # --------------------------------
- # Islamic holidays
- # Day of Ashura
- # Mawlid
- # Eid ul-Fitr
- # Eid al-Adha
- # --------------------------------
- # Day of Ashura
- # 10th day of 1st Islamic month
- islam_year = from_gregorian(year, 10, 1)[0]
- y, m, d = to_gregorian(islam_year, 1, 10)
- name = "Day of Ashura"
- self[date(year, m, d)] = name
- # Mawlid, Birth of the Prophet
- # 12th day of 3rd Islamic month
- islam_year = from_gregorian(year, 11, 20)[0]
- y, m, d = to_gregorian(islam_year, 3, 12)
- name = "Mawlid"
- self[date(y, m, d)] = name
- # Eid ul-Fitr
- # 1st and 2nd day of 10th Islamic month
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- y2, m2, d2 = to_gregorian(islam_year, 10, 2)
- name = "Eid al-Fitr"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- # Eid al-Adha, i.e., Feast of the Sacrifice
- islam_year = from_gregorian(year, 8, 22)[0]
- y, m, d = to_gregorian(islam_year, 12, 10)
- name = "Feast of the Sacrifice"
- self[date(year, m, d)] = name
- # --------------------------------
- # Christian holidays
- # New Year, Palm Sunday,
- # Maundy Thursday
- # Good Friday
- # Easter Sunday
- # Feast of Pentecost
- # Fest of St. Theresa of Calcutta
- # Feast of the Blessed Virgin
- # All Saints Day
- # All Souls Day
- # Christmas Day
- # Boxing Day
- # Feast of Holy Family
- # --------------------------------
- # New Year's Day
- self[date(year, 1, 1)] = "New Year's Day"
- # Palm Sunday
- name = "Palm Sunday"
- self[easter(year) - rd(days=7)] = name
- # Maundy Thursday
- name = "Maundy Thursday"
- self[easter(year) - rd(days=3)] = name
- # Good Friday
- name = "Good Friday"
- self[easter(year) - rd(days=2)] = name
- # Easter Sunday
- name = "Easter Sunday"
- self[easter(year)] = name
- # Feast of Pentecost
- name = "Feast of Pentecost"
- self[easter(year) + rd(days=49)] = name
- # Fest of St. Theresa of Calcutta
- name = "Fest of St. Theresa of Calcutta"
- self[date(year, 9, 5)] = name
- # Feast of the Blessed Virgin
- name = "Feast of the Blessed Virgin"
- self[date(year, 9, 8)] = name
- # All Saints Day
- name = "All Saints Day"
- self[date(year, 11, 1)] = name
- # All Souls Day
- name = "All Souls Day"
- self[date(year, 11, 2)] = name
- # Christmas
- name = "Christmas Day"
- self[date(year, 12, 25)] = name
- # Boxing Day
- name = "Boxing Day"
- self[date(year, 12, 26)] = name
- # Feast of Holy Family
- name = "Feast of Holy Family"
- self[date(year, 12, 30)] = name
- class IN(India):
- pass
- # ------------ Holidays in Malaysia---------------------
- class Malaysia(HolidayBase):
- """
- Implement public holidays in Malaysia
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Malaysia
- """
- def __init__(self, **kwargs):
- self.country = "MY"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Birthday of Prophet, Mawlid in India
- # 12th day of 3rd Islamic month
- islam_year = from_gregorian(year, 11, 20)[0]
- y, m, d = to_gregorian(islam_year, 3, 12)
- name = "Birth of Prophet"
- self[date(y, m, d)] = name
- # Chinese New Year
- name = "Chinese New Year"
- self[LunarDate(year, 1, 1).toSolarDate()] = name
- # Tamil New Year
- # Note: it's not necessarily 04/14
- # due to the local calendar
- # other possible dates are 04/13 and 04/15
- name = "Tamil New Year"
- self[date(year, 4, 14)] = name
- # Good Friday
- name = "Good Friday"
- self[easter(year) - rd(days=2)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Buddha's Birthday
- name = "Wesak Day"
- self[LunarDate(year, 4, 15).toSolarDate()] = name
- # King's birthday
- # https://www.thestar.com.my/news/nation/2017/04/26/
- # Before 2017: first Saturday of June
- # 2017-2021: last Saturday of July
- name = "King's birthday"
- if year < 2017:
- c = Calendar(firstweekday=MONDAY)
- monthcal = c.monthdatescalendar(year, 6)
- l1 = len(monthcal)
- saturdays = []
- for i in range(l1):
- if monthcal[i][5].month == 6:
- saturdays.append(monthcal[i][5])
- self[saturdays[0]] = name
- elif (year >= 2017) and (year <= 2021):
- c = Calendar(firstweekday=MONDAY)
- monthcal = c.monthdatescalendar(year, 7)
- l1 = len(monthcal)
- saturdays = []
- for i in range(l1):
- if monthcal[i][5].month == 7:
- saturdays.append(monthcal[i][5])
- self[saturdays[-1]] = name
- # Eid al-Fitr
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- y2, m2, d2 = to_gregorian(islam_year, 10, 2)
- name = "Eid al-Fitr"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- # Malaysia Day
- name = "Malaysia Day"
- self[date(year, 9, 16)] = name
- # Feast of the Sacrifice
- islam_year = from_gregorian(year, 8, 22)[0]
- y, m, d = to_gregorian(islam_year, 12, 10)
- name = "Feast of the Sacrifice"
- self[date(year, m, d)] = name
- # First Day of Muharram
- islam_year = from_gregorian(year, 9, 11)[0]
- y, m, d = to_gregorian(islam_year + 1, 1, 1)
- name = "First Day of Muharram"
- self[date(y, m, d)] = name
- # Christmas
- name = "Christmas Day"
- self[date(year, 12, 25)] = name
- class MY(Malaysia):
- pass
- # ------------ Holidays in Vietnam---------------------
- class Vietnam(HolidayBase):
- """
- Implement public holidays in Vietnam
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Vietnam
- """
- def __init__(self, **kwargs):
- self.country = "VN"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Vietnamese New Year
- name = "Vietnamese New Year"
- self[LunarDate(year - 1, 12, 30).toSolarDate()] = name
- self[LunarDate(year, 1, 1).toSolarDate()] = name
- self[LunarDate(year, 1, 2).toSolarDate()] = name
- self[LunarDate(year, 1, 3).toSolarDate()] = name
- self[LunarDate(year, 1, 4).toSolarDate()] = name
- self[LunarDate(year, 1, 5).toSolarDate()] = name
- # Hung Kings Commemorations
- name = "Hung Kings Commemorations"
- self[LunarDate(year, 3, 10).toSolarDate()] = name
- # Reunification Day
- name = "Reunification Day"
- self[date(year, 4, 30)] = name
- # Labor Day/International Workers' Day
- name = "Labor Day/International Workers' Day"
- self[date(year, 5, 1)] = name
- # National Day
- name = "National Day"
- self[date(year, 9, 2)] = name
- class VN(Vietnam):
- pass
- # ------------ Holidays in Thailand---------------------
- class Thailand(HolidayBase):
- """
- Implement public holidays in Thailand
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Thailand
- """
- def __init__(self, **kwargs):
- self.country = "TH"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Magha Pujab
- # Note:
- # This holiday is determined by Buddhist calendar, which is not currently
- # available. Only hard coded version of this holiday from 2016 to 2019
- # is available.
- name = "Magha Pujab/Makha Bucha"
- if year == 2016:
- self[date(year, 2, 22)] = name
- elif year == 2017:
- self[date(year, 2, 11)] = name
- elif year == 2018:
- self[date(year, 3, 1)] = name
- elif year == 2019:
- self[date(year, 2, 19)] = name
- else:
- pass
- # Chakri Memorial Day
- name = "Chakri Memorial Day"
- april_6 = date(year, 4, 6).weekday()
- if april_6 == 5:
- self[date(year, 4, 6 + 2)] = name
- elif april_6 == 6:
- self[date(year, 4, 6 + 1)] = name
- else:
- self[date(year, 4, 6)] = name
- # Songkran Festival
- name = "Songkran Festival"
- self[date(year, 4, 14)] = name
- # Royal Ploughing Ceremony
- # arbitrary day in May
- # Buddha's Birthday
- name = "Buddha's Birthday"
- self[LunarDate(year, 4, 15).toSolarDate()] = name
- # Coronation Day, removed in 2017
- name = "Coronation Day"
- if year < 2017:
- self[date(year, 5, 5)] = name
- # King Maha Vajiralongkorn's Birthday
- name = "King Maha Vajiralongkorn's Birthday"
- self[date(year, 7, 28)] = name
- # Asalha Puja
- # This is also a Buddha holiday, and we only implement
- # the hard coded version from 2006 to 2025
- # reference:
- # http://www.when-is.com/asalha_puja.asp
- warning_msg = "We only support Asalha Puja holiday from 2006 to 2025"
- warnings.warn(warning_msg, Warning)
- name = "Asalha Puja"
- if year == 2006:
- self[date(year, 7, 11)] = name
- elif year == 2007:
- self[date(year, 6, 30)] = name
- elif year == 2008:
- self[date(year, 7, 18)] = name
- elif year == 2009:
- self[date(year, 7, 7)] = name
- elif year == 2010:
- self[date(year, 7, 25)] = name
- elif year == 2011:
- self[date(year, 7, 15)] = name
- elif year == 2012:
- self[date(year, 8, 2)] = name
- elif year == 2013:
- self[date(year, 7, 30)] = name
- elif year == 2014:
- self[date(year, 7, 13)] = name
- elif year == 2015:
- self[date(year, 7, 30)] = name
- elif year == 2016:
- self[date(year, 7, 15)] = name
- elif year == 2017:
- self[date(year, 7, 9)] = name
- elif year == 2018:
- self[date(year, 7, 29)] = name
- elif year == 2019:
- self[date(year, 7, 16)] = name
- elif year == 2020:
- self[date(year, 7, 5)] = name
- elif year == 2021:
- self[date(year, 7, 24)] = name
- elif year == 2022:
- self[date(year, 7, 13)] = name
- elif year == 2023:
- self[date(year, 7, 3)] = name
- elif year == 2024:
- self[date(year, 7, 21)] = name
- elif year == 2025:
- self[date(year, 7, 10)] = name
- else:
- pass
- # Beginning of Vassa
- warning_msg = "We only support Vassa holiday from 2006 to 2020"
- warnings.warn(warning_msg, Warning)
- name = "Beginning of Vassa"
- if year == 2006:
- self[date(year, 7, 12)] = name
- elif year == 2007:
- self[date(year, 7, 31)] = name
- elif year == 2008:
- self[date(year, 7, 19)] = name
- elif year == 2009:
- self[date(year, 7, 8)] = name
- elif year == 2010:
- self[date(year, 7, 27)] = name
- elif year == 2011:
- self[date(year, 7, 16)] = name
- elif year == 2012:
- self[date(year, 8, 3)] = name
- elif year == 2013:
- self[date(year, 7, 23)] = name
- elif year == 2014:
- self[date(year, 7, 13)] = name
- elif year == 2015:
- self[date(year, 8, 1)] = name
- elif year == 2016:
- self[date(year, 7, 20)] = name
- elif year == 2017:
- self[date(year, 7, 9)] = name
- elif year == 2018:
- self[date(year, 7, 28)] = name
- elif year == 2019:
- self[date(year, 7, 17)] = name
- elif year == 2020:
- self[date(year, 7, 6)] = name
- else:
- pass
- # The Queen Sirikit's Birthday
- name = "The Queen Sirikit's Birthday"
- self[date(year, 8, 12)] = name
- # Anniversary for the Death of King Bhumibol Adulyadej
- name = "Anniversary for the Death of King Bhumibol Adulyadej"
- self[date(year, 10, 13)] = name
- # King Chulalongkorn Day
- name = "King Chulalongkorn Day"
- self[date(year, 10, 23)] = name
- # King Bhumibol Adulyadej's Birthday Anniversary
- name = "King Bhumibol Adulyadej's Birthday Anniversary"
- self[date(year, 12, 5)] = name
- # Constitution Day
- name = "Constitution Day"
- self[date(year, 12, 10)] = name
- # New Year's Eve
- name = "New Year's Eve"
- self[date(year, 12, 31)] = name
- class TH(Thailand):
- pass
- # ------------ Holidays in Philippines---------------------
- class Philippines(HolidayBase):
- """
- Implement public holidays in Philippines
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Thailand
- """
- def __init__(self, **kwargs):
- self.country = "PH"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Maundy Thursday
- name = "Maundy Thursday"
- self[easter(year) - rd(days=3)] = name
- # Good Friday
- name = "Good Friday"
- self[easter(year) - rd(days=2)] = name
- # Day of Valor
- name = "Day of Valor"
- self[date(year, 4, 9)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Independence Day
- name = "Independence Day"
- self[date(year, 6, 12)] = name
- # Eid al-Fitr
- name = "Eid al-Fitr"
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- self[date(year, m1, d1) - timedelta(days=1)] = name
- # Eid al-Adha, i.e., Feast of the Sacrifice
- name = "Feast of the Sacrifice"
- islam_year = from_gregorian(year, 8, 22)[0]
- y, m, d = to_gregorian(islam_year, 12, 10)
- self[date(year, m, d)] = name
- # National Heroes' Day
- name = "National Heroes' Day"
- self[date(year, 8, 27)] = name
- # Bonifacio Day
- name = "Bonifacio Day"
- self[date(year, 11, 30)] = name
- # Christmas Day
- name = "Christmas Day"
- self[date(year, 12, 25)] = name
- # Rizal Day
- name = "Rizal Day"
- self[date(year, 12, 30)] = name
- class PH(Philippines):
- pass
- # ------------ Holidays in Turkey---------------------
- class Turkey(HolidayBase):
- """
- Implement public holidays in Turkey
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Thailand
- """
- def __init__(self, **kwargs):
- self.country = "TU"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # National Sovereignty and Children's Day
- name = "National Sovereignty and Children's Day "
- self[date(year, 4, 23)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Commemoration of Atatürk, Youth and Sports Day
- name = "Commemoration of Atatürk, Youth and Sports Day"
- self[date(year, 5, 19)] = name
- # Democracy and National Unity Day
- name = "Democracy and National Unity Day"
- self[date(year, 7, 15)] = name
- # Victory Day
- name = "Victory Day"
- self[date(year, 8, 30)] = name
- # Republic Day
- name = "Republic Day"
- self[date(year, 10, 29)] = name
- # Eid al-Fitr
- name = "Eid al-Fitr"
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- self[date(year, m1, d1) - timedelta(days=1)] = name
- # Eid al-Adha, i.e., Feast of the Sacrifice
- name = "Feast of the Sacrifice"
- islam_year = from_gregorian(year, 8, 22)[0]
- y, m, d = to_gregorian(islam_year, 12, 10)
- self[date(year, m, d)] = name
- class TU(Turkey):
- pass
- # ------------ Holidays in Pakistan---------------------
- class Pakistan(HolidayBase):
- """
- Implement public holidays in Pakistan
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Pakistan
- """
- def __init__(self, **kwargs):
- self.country = "PK"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # Kashmir Solidarity Day
- name = "Kashmir Solidarity Day"
- self[date(year, 2, 5)] = name
- # Pakistan Day
- name = "Pakistan Day"
- self[date(year, 3, 23)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Independence Day
- name = "Independence Day"
- self[date(year, 8, 14)] = name
- # Iqbal Day
- name = "Iqbal Day"
- self[date(year, 11, 9)] = name
- # Christmas Day
- # Also birthday of PK founder
- name = "Christmas Day"
- self[date(year, 12, 25)] = name
- # Eid al-Adha, i.e., Feast of the Sacrifice
- name = "Feast of the Sacrifice"
- islam_year = from_gregorian(year, 8, 22)[0]
- y1, m1, d1 = to_gregorian(islam_year, 12, 10)
- y2, m2, d2 = to_gregorian(islam_year, 12, 11)
- y3, m3, d3 = to_gregorian(islam_year, 12, 12)
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- self[date(year, m3, d3)] = name
- # Eid al-Fitr
- name = "Eid al-Fitr"
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- y2, m2, d2 = to_gregorian(islam_year, 10, 2)
- y3, m3, d3 = to_gregorian(islam_year, 10, 3)
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- self[date(year, m3, d3)] = name
- # Mawlid, Birth of the Prophet
- # 12th day of 3rd Islamic month
- islam_year = from_gregorian(year, 11, 20)[0]
- y, m, d = to_gregorian(islam_year, 3, 12)
- name = "Mawlid"
- self[date(y, m, d)] = name
- # Day of Ashura
- # 10th and 11th days of 1st Islamic month
- islam_year = from_gregorian(year, 10, 1)[0]
- y1, m1, d1 = to_gregorian(islam_year, 1, 10)
- y2, m2, d2 = to_gregorian(islam_year, 1, 11)
- name = "Day of Ashura"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- # Shab e Mairaj
- islam_year = from_gregorian(year, 4, 13)[0]
- y1, m1, d1 = to_gregorian(islam_year, 7, 27)
- name = "Shab e Mairaj"
- self[date(year, m1, d1)] = name
- # Defence Day
- name = "Defence Day"
- self[date(year, 9, 6)] = name
- # Death Anniversary of Quaid-e-Azam
- name = "Death Anniversary of Quaid-e-Azam"
- self[date(year, 9, 11)] = name
- class PK(Pakistan):
- pass
- # ------------ Holidays in Bangladesh---------------------
- class Bangladesh(HolidayBase):
- """
- Implement public holidays in Bangladesh
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Bangladesh
- """
- def __init__(self, **kwargs):
- self.country = "BD"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # Language Martyrs' Day
- name = "Language Martyrs' Day"
- self[date(year, 2, 21)] = name
- # Mujib's birthday
- name = "Mujib's birthday"
- self[date(year, 3, 17)] = name
- # Independence Day
- name = "Independence Day"
- self[date(year, 3, 26)] = name
- # Bengali New Year's Day
- name = "Bengali New Year's Day"
- self[date(year, 4, 14)] = name
- # Labor Day, May Day (local name)
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # National Mourning Day
- name = "National Mourning Day"
- self[date(year, 8, 15)] = name
- # Victory Day
- name = "Victory Day"
- self[date(year, 12, 16)] = name
- class BD(Bangladesh):
- pass
- # ------------ Holidays in Egypt---------------------
- class Egypt(HolidayBase):
- """
- Implement public holidays in Egypt
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Egypt
- """
- def __init__(self, **kwargs):
- self.country = "EG"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # Fixed holidays
- # Christmas
- name = "Christmas"
- self[date(year, 1, 7)] = name
- # Revolution Day, after 2011
- name = "Revolution Day 2011"
- if year <= 2011:
- self[date(year, 1, 25)] = name
- # Sinai Liberation Day, after 1982
- name = "Sinai Liberation Day"
- if year <= 1982:
- self[date(year, 4, 25)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Revolution Day
- name = "Sinai Liberation Day"
- self[date(year, 7, 23)] = name
- # Armed Forces Day
- name = "Armed Forces Day"
- self[date(year, 10, 6)] = name
- # Sham El Nessim
- # The Monday following Orthodox Easter
- name = "Sham El Nessim"
- orthodox_easter = easter(year, method=2)
- self[orthodox_easter + timedelta(days=1)] = name
- # Islamic New Year
- islam_year = from_gregorian(year, 9, 11)[0]
- y, m, d = to_gregorian(islam_year + 1, 1, 1)
- name = "Islamic New Year"
- self[date(year, m, d)] = name
- # Birthday of Prophet, Mawlid in India
- # 12th day of 3rd Islamic month
- islam_year = from_gregorian(year, 11, 20)[0]
- y, m, d = to_gregorian(islam_year, 3, 12)
- name = "Birth of Prophet"
- self[date(y, m, d)] = name
- # Eid ul-Fitr
- # 1st and 2nd day of 10th Islamic month
- islam_year = from_gregorian(year, 6, 15)[0]
- y1, m1, d1 = to_gregorian(islam_year, 10, 1)
- y2, m2, d2 = to_gregorian(islam_year, 10, 2)
- y3, m3, d3 = to_gregorian(islam_year, 10, 3)
- name = "Eid al-Fitr"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- self[date(year, m3, d3)] = name
- # Eid al-Adha, i.e., Feast of the Sacrifice
- islam_year = from_gregorian(year, 8, 22)[0]
- y1, m1, d1 = to_gregorian(islam_year, 12, 10)
- y2, m2, d2 = to_gregorian(islam_year, 12, 11)
- y3, m3, d3 = to_gregorian(islam_year, 12, 12)
- y4, m4, d4 = to_gregorian(islam_year, 12, 13)
- name = "Feast of the Sacrifice"
- self[date(year, m1, d1)] = name
- self[date(year, m2, d2)] = name
- self[date(year, m3, d3)] = name
- self[date(year, m4, d4)] = name
- class EG(Egypt):
- pass
- # ------------ Holidays in China---------------------
- class China(HolidayBase):
- """
- Implement public holidays in China
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_China
- """
- def __init__(self, **kwargs):
- self.country = "CN"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Chinese New Year/ Spring Festival
- name = "Chinese New Year"
- self[LunarDate(year, 1, 1).toSolarDate()] = name
- # Tomb-Sweeping Day
- name = "Tomb-Sweeping Day"
- self[date(year, 4, 4)] = name
- self[date(year, 4, 5)] = name
- # Labor Day
- name = "Labor Day"
- self[date(year, 5, 1)] = name
- # Dragon Boat Festival
- name = "Dragon Boat Festival"
- self[LunarDate(year, 5, 5).toSolarDate()] = name
- # Mid-Autumn Festival
- name = "Mid-Autumn Festival"
- self[LunarDate(year, 8, 15).toSolarDate()] = name
- # National Day
- name = "National Day"
- self[date(year, 10, 1)] = name
- class CN(China):
- pass
- # ------------ Holidays in Russia---------------------
- class Russia(HolidayBase):
- """
- Implement public holidays in Russia
- Reference:
- https://en.wikipedia.org/wiki/Public_holidays_in_Russia
- Please note:
- Orthodox Christmas Day is official day off at Russia
- But the Dec. 25 Christmas is also celebrated.
- """
- def __init__(self, **kwargs):
- self.country = "RU"
- HolidayBase.__init__(self, **kwargs)
- def _populate(self, year):
- # New Year's Day
- name = "New Year's Day"
- self[date(year, 1, 1)] = name
- # Orthodox Christmas day
- name = "Orthodox Christmas Day"
- self[date(year, 1, 7)] = name
- # Dec. 25 Christmas Day
- name = "Christmas Day"
- self[date(year, 12, 25)] = name
- # Defender of the Fatherland Day
- name = "Defender of the Fatherland Day"
- self[date(year, 2, 23)] = name
- # International Women's Day
- name = "International Women's Day"
- self[date(year, 3, 8)] = name
- # National Flag Day
- name = "National Flag Day"
- self[date(year, 8, 22)] = name
- # Spring and Labour Day
- name = "Spring and Labour Day"
- self[date(year, 5, 1)] = name
- # Victory Day
- name = "Victory Day"
- self[date(year, 5, 9)] = name
- # Russia Day
- name = "Russia Day"
- self[date(year, 6, 12)] = name
- # Unity Day
- name = "Unity Day"
- self[date(year, 11, 4)] = name
- class RU(Russia):
- pass
|