def _populate(self, year): # New Year's Day name = "New Year's Day" self[date(year, 1, 1)] = name # New Year's Day by the Lunar name = "New Year's Day by the Lunar" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date() if ds.year == year: self[ds] = name # Independence Movement Day name = "Independence Movement Day" self[date(year, 3, 1)] = name # Buddha's Birthday name = "Buddha's Birthday" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 4, 8)).to_date() if ds.year == year: self[ds] = name # Children's Day name = "Children's Day" self[date(year, 5, 5)] = name # Memorial Day name = "Memorial Day" self[date(year, 6, 6)] = name # Liberation Day name = "Liberation Day" self[date(year, 8, 15)] = name # Chuseok name = "Chuseok" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 8, 15)).to_date() if ds.year == year: self[ds] = name # National Foundation Day name = "National Foundation Day" self[date(year, 10, 3)] = name # Hangeul Proclamation Day name = "Hangeul Proclamation Day" self[date(year, 10, 9)] = name # Christmas Day name = "Christmas Day" self[date(year, 12, 25)] = name
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" for offset in range(-1, 2, 1): try: ds = Converter.Lunar2Solar(Lunar(year - 1 + offset, 12, 30)).to_date() except DateNotExist: ds = Converter.Lunar2Solar(Lunar(year - 1 + offset, 12, 29)).to_date() if ds.year == year: self[ds] = name ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date() if ds.year == year: self[ds] = name ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 2)).to_date() if ds.year == year: self[ds] = name ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 3)).to_date() if ds.year == year: self[ds] = name ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 4)).to_date() if ds.year == year: self[ds] = name ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 5)).to_date() if ds.year == year: self[ds] = name # Hung Kings Commemorations name = "Hung Kings Commemorations" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 3, 10)).to_date() if ds.year == year: self[ds] = 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
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" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date() if ds.year == year: self[ds] = 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" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 5, 5)).to_date() if ds.year == year: self[ds] = name # Mid-Autumn Festival name = "Mid-Autumn Festival" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 8, 15)).to_date() if ds.year == year: self[ds] = name # National Day name = "National Day" self[date(year, 10, 1)] = name
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" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date() if ds.year == year: self[ds] = 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" log.warning(warning_msg) 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 name = "Ascension of the Prophet" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 3, 17)[0] y, m, d = to_gregorian(islam_year, 7, 27) if y == year: self[date(y, m, d)] = name # Labor Day name = "Labor Day" self[date(year, 5, 1)] = name # Ascension of Jesus Christ name = "Ascension of Jesus" for offset in range(-1, 2, 1): ds = easter(year + offset) + rd(days=+39) if ds.year == year: self[ds] = name # Buddha's Birthday name = "Buddha's Birthday" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 4, 15)).to_date() if ds.year == year: self[ds] = name # Pancasila Day, since 2017 if year >= 2017: name = "Pancasila Day" self[date(year, 6, 1)] = name # Eid al-Fitr name = "Eid al-Fitr" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 6, 15)[0] y1, m1, d1 = to_gregorian(islam_year, 10, 1) y2, m2, d2 = to_gregorian(islam_year, 10, 2) if y1 == year: self[date(y1, m2, d2)] = name if y2 == year: self[date(y2, m2, d2)] = name # Independence Day name = "Independence Day" self[date(year, 8, 17)] = name # Feast of the Sacrifice name = "Feast of the Sacrifice" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 8, 22)[0] y, m, d = to_gregorian(islam_year, 12, 10) if y == year: self[date(y, m, d)] = name # Islamic New Year name = "Islamic New Year" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 9, 11)[0] y, m, d = to_gregorian(islam_year + 1, 1, 1) if y == year: self[date(y, m, d)] = name # Birth of the Prophet name = "Birth of the Prophet" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 11, 20)[0] y, m, d = to_gregorian(islam_year + 1, 3, 12) if y == year: self[date(y, m, d)] = name # Christmas self[date(year, 12, 25)] = "Christmas"
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" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 4, 15)).to_date() if ds.year == year: self[ds] = 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" log.warning(warning_msg) 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" log.warning(warning_msg) 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
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 name = "Birth of Prophet" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 11, 20)[0] y, m, d = to_gregorian(islam_year, 3, 12) if y == year: self[date(y, m, d)] = name # Chinese New Year name = "Chinese New Year" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 1, 1)).to_date() if ds.year == year: self[ds] = 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" for offset in range(-1, 2, 1): ds = easter(year + offset) - rd(days=2) if ds.year == year: self[ds] = name # Labor Day name = "Labor Day" self[date(year, 5, 1)] = name # Buddha's Birthday name = "Wesak Day" for offset in range(-1, 2, 1): ds = Converter.Lunar2Solar(Lunar(year + offset, 4, 15)).to_date() if ds.year == year: self[ds] = 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 name = "Eid al-Fitr" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 6, 15)[0] y1, m1, d1 = to_gregorian(islam_year, 10, 1) y2, m2, d2 = to_gregorian(islam_year, 10, 2) if y1 == year: self[date(y1, m1, d1)] = name if y2 == year: self[date(y2, m2, d2)] = name # Malaysia Day name = "Malaysia Day" self[date(year, 9, 16)] = name # Feast of the Sacrifice name = "Feast of the Sacrifice" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 8, 22)[0] y, m, d = to_gregorian(islam_year, 12, 10) if y == year: self[date(y, m, d)] = name # First Day of Muharram name = "First Day of Muharram" for offset in range(-1, 2, 1): islam_year = from_gregorian(year + offset, 9, 11)[0] y, m, d = to_gregorian(islam_year + 1, 1, 1) if y == year: self[date(y, m, d)] = name # Christmas name = "Christmas Day" self[date(year, 12, 25)] = name
# -*- coding: utf-8 -*- import traceback import datetime from lunarcalendar import Converter, Solar, Lunar, DateNotExist from lunarcalendar.festival import festivals if __name__ == '__main__': # solar converts to lunar, then converts to solar solar = Solar(2018, 1, 1) print(solar) lunar = Converter.Solar2Lunar(solar) print(lunar) solar = Converter.Lunar2Solar(lunar) print(solar) print(solar.to_date(), type(solar.to_date())) print(Solar.from_date(datetime.date(2018, 1, 1))) print('=' * 20) # lunar converts to solar, then converts to solar lunar = Lunar(2018, 2, 30, isleap=False) print(lunar) solar = Converter.Lunar2Solar(lunar) print(solar) lunar = Converter.Solar2Lunar(solar) print(lunar) print(lunar.to_date(), type(lunar.to_date())) print(Lunar.from_date(datetime.date(2018, 4, 15))) print('=' * 20)