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
def test_lunar_holiday_in_current_year(self): self.assertEqual(gong.lunarnewyearsday(), LunarDate(current_year, 1, 1).toSolarDate()) self.assertEqual(gong.buddhasbirthday(), LunarDate(current_year, 4, 8).toSolarDate()) self.assertEqual(gong.koreanthanksgiving(), LunarDate(current_year, 8, 15).toSolarDate())
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 = LunarDate(year + offset, 1, 1).toSolarDate() 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 = LunarDate(year + offset, 4, 8).toSolarDate() 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 = LunarDate(year + offset, 8, 15).toSolarDate() 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 test_lunar_to_solar_19550329_leap_case_check_with_solar(self): lunar_date = LunarDate(1955, 3, 29, False) solar_date = lunar_date.solar() assert solar_date.year == 1955 assert solar_date.month == 4 assert solar_date.day == 21 lunar_date_leap = LunarDate(1955, 3, 29, True) solar_date_leap = lunar_date_leap.solar() assert solar_date_leap.year == 1955 assert solar_date_leap.month == 5 assert solar_date_leap.day == 20
def koreanthanksgiving(self, year=None, dayoff=False, substitute=True): year = year if year else self.core.thisyear theday = LunarDate(year, 8, 15).toSolarDate() if dayoff: return self.core.threedays(theday) else: return theday
def buddha(year=None): """ :parm year: int :return: Buddha's Birthday Day """ year = year if year else _year return LunarDate(year, 4, 8).toSolarDate()
def chuseok(year=None): """ :parm year: int :return: Thanksgiving Day of Korea """ year = year if year else _year return LunarDate(year, 8, 15).toSolarDate()
def lunar_newyear(year=None): """ :parm year: int :return: Lunar New Year Day """ year = year if year else _year return LunarDate(year, 1, 1).toSolarDate()
def get_queryset(self, *args, **kwargs): queryset_list = Event.objects.all() year_q = self.request.GET.get("year") month_q = self.request.GET.get("month") type_q = self.request.GET.get('type') if year_q and year_q != 'null': try: year_q = int(year_q) except: year_q = datetime.now().year else: year_q = datetime.now().year if type_q and type_q != 'null': queryset_list = queryset_list.filter(type=type_q) if month_q and month_q != 'null': month_q = int(month_q) filtered_queryset_list = [] for each_query in queryset_list: if each_query.is_lunar: date = LunarDate(year_q, each_query.origin_date.month, each_query.origin_date.day).toSolarDate() else: date = each_query.origin_date if date.month == month_q: filtered_queryset_list.append(each_query) return filtered_queryset_list return queryset_list
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
def buddhasbirthday(self, year=None, dayoff=False, substitute=True): year = year if year else self.core.thisyear theday = LunarDate(year, 4, 8).toSolarDate() if dayoff: if 1975 <= year: return theday else: return None else: return theday
def validate_converted_date(self, value): date = value data = self.get_initial() request = self.context.get("request") year = request.GET.get('year') is_lunar = data.get("is_lunar") if is_lunar: if not year or year == 'null': year = datetime.now().year date = LunarDate(year, date.month, date.day).toSolarDate() return date
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 = LunarDate(year - 1 + offset, 12, 30).toSolarDate() except ValueError: ds = LunarDate(year - 1 + offset, 12, 29).toSolarDate() if ds.year == year: self[ds] = name ds = LunarDate(year + offset, 1, 1).toSolarDate() if ds.year == year: self[ds] = name ds = LunarDate(year + offset, 1, 2).toSolarDate() if ds.year == year: self[ds] = name ds = LunarDate(year + offset, 1, 3).toSolarDate() if ds.year == year: self[ds] = name ds = LunarDate(year + offset, 1, 4).toSolarDate() if ds.year == year: self[ds] = name ds = LunarDate(year + offset, 1, 5).toSolarDate() if ds.year == year: self[ds] = name # Hung Kings Commemorations name = "Hung Kings Commemorations" for offset in range(-1, 2, 1): ds = LunarDate(year + offset, 3, 10).toSolarDate() 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 = LunarDate(year + offset, 1, 1).toSolarDate() 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 = LunarDate(year + offset, 5, 5).toSolarDate() if ds.year == year: self[ds] = name # Mid-Autumn Festival name = "Mid-Autumn Festival" for offset in range(-1, 2, 1): ds = LunarDate(year + offset, 8, 15).toSolarDate() if ds.year == year: self[ds] = name # National Day name = "National Day" self[date(year, 10, 1)] = name
def getbirthday(self, year, month, day, hour, birthdaytype): f = open(datafolder + '万年历.txt') cal = pd.read_csv(f, header=0, index_col=0, encoding='utf-8') if birthdaytype == '阳历': l = cal.loc[dt.date(year, month, day).strftime('%Y-%m-%d')] return {'阳历':dt.datetime(year,month,day,hour),\ '阴历':{'生日':[l[0],l[1],l[2],hour]} } elif birthdaytype == '阴历': l = LunarDate(year, month, day, isLeapMonth).toSolarDate() return {'阳历':dt.datetime(l[0],l[1],l[2],hour),\ '阴历':{'生日':[year,month,day,hour]} }
def get_converted_date(self, obj): year = self.context.get('request').GET.get('year') is_lunar = obj.is_lunar try: year = int(year) except: year = datetime.now().year if is_lunar: if not year or year == 'null' or (year < 1900 or year >= 2050): year = datetime.now().year date = LunarDate(year, obj.origin_date.month, obj.origin_date.day).toSolarDate() else: date = obj.origin_date return date.strftime("%m-%d")
def lunarnewyearsday(self, year=None, dayoff=False, substitute=True): year = year if year else self.core.thisyear theday = LunarDate(year, 1, 1).toSolarDate() if dayoff: if 2014 <= year: if substitute: return self.core.threedays(theday) else: return self.core.threedays(theday) elif 1989 <= year < 2014: return self.core.threedays(theday) elif 1985 <= year < 1989: return theday else: return None else: return theday
def checkFriends(today): birthData = file('D:\OtherCode\Navigation\Tools\LearningPython\Email\Birthday.txt','r') Persons = [] for line in birthData.readlines(): name = line.split(' ')[0] birthday = line.split(' ')[1] isLunar = line.split(' ')[2] birthDate = datetime.datetime.strptime(birthday, '%Y-%m-%d') age = today.date().year - birthDate.date().year if string.atoi(isLunar): birthDateLunar = LunarDate(birthDate.date().year, birthDate.date().month, birthDate.date().day).toSolarDate() birthDate = datetime.datetime.combine(birthDateLunar, datetime.time()) birthDate = birthDate.replace(year=today.year) timespan = birthDate - today if timespan.days >= -1 and timespan.days <= 2: Persons.append(Person(name, birthDate, timespan.days+1, age, string.atoi(isLunar))) return Persons
def change_year(year): if not (CP.spring_first and CP.spring_last and CP.spring_first.year == year and CP.spring_last.year == year): CP.spring_first = (LunarDate(year, 1, 1) - timedelta(days=1)).toSolarDate() CP.spring_last = CP.spring_first + timedelta(days=7) if CP.current_year != year: d = datetime.now() year = d.year # month = d.month CP.regular_year_month = '^201\d((0\d)|(1[0-2]))(([0-2]\d)|(3[01]))' CP.regular_abb_year_month = '^1\d((0\d)|(1[0-2]))(([0-2]\d)|(3[01]))' CP.regular_year = '^201\d' CP.current_year = year CP.chinese_zodiac = get_chinese_zodiac() CP.zodiac_number_table = CP.zodiac_number_table[CP.chinese_zodiac::-1] + \ CP.zodiac_number_table[:CP.chinese_zodiac:-1]
def get(self, request): result_event = None queryset_list = Event.objects.all() today = datetime.today() + timedelta(hours=9) if len(queryset_list) == 0: # 행사가 없을 경우 return Response(status=404) converted_list = [] for each_query in queryset_list: if each_query.is_lunar: date = LunarDate(today.year, each_query.origin_date.month, each_query.origin_date.day).toSolarDate() else: date = each_query.origin_date converted_list.append({ 'month': date.month, 'day': date.day, 'event': each_query }) month_equal_query = filter_month(converted_list, today.month) if len(month_equal_query) != 0: day_gte_query = filter_gte_day(month_equal_query, today.day) if len(day_gte_query) != 0: result_event = day_gte_query[0] if result_event is None: month_gte_query = filter_gt_month(converted_list, today.month) if len(month_gte_query) != 0: result_event = month_gte_query[0] if result_event is None: result_event = converted_list[0] serializer = EventNearSerializer(result_event['event'], context={'request': request}) return Response(serializer.data)
def lunar(year, month, day): return LunarDate(year, month, day).toSolarDate()
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 = LunarDate(year + offset, 4, 15).toSolarDate() 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" 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
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 = LunarDate(year + offset, 1, 1).toSolarDate() 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" 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 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 = LunarDate(year + offset, 4, 15).toSolarDate() 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 # 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 = LunarDate(year + offset, 1, 1).toSolarDate() 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 = LunarDate(year + offset, 4, 15).toSolarDate() 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
locations = ['USA'] #'Russia','Germany','China','Brazil','SA','India' lock_year = 2020 output_dir = '/storage/qliu6/trmm/1998_2017_merge/results/OMI/period/' for location in locations: if location == 'China': lock_month = 1 lock_day = 25 reopen_month = 4 reopen_day = 9 end_month = 6 end_day = 30 lock_doy = doy(lock_year, lock_month, lock_day) lunar_lock_date = LunarDate.fromSolarDate(int(lock_year), int(lock_month), int(lock_day)) lstart = LunarDate(lunar_lock_date.year, 1, 1) ldoy_lock = (lunar_lock_date - lstart).days + 1 reopen_doy = doy(lock_year, reopen_month, reopen_day) lunar_reopen_date = LunarDate.fromSolarDate( int(lock_year), int(reopen_month), int(reopen_day)) ldoy_reopen = (lunar_reopen_date - lstart).days + 1 print(ldoy_reopen) end_doy = doy(lock_year, end_month, end_day) lunar_end_date = LunarDate.fromSolarDate(int(lock_year), int(end_month), int(end_day)) ldoy_end = (lunar_end_date - lstart).days + 1 start = 330
def lunar_new_year(year, offset=None, observance=None): dt = LunarDate(year, 1, 1).toSolarDate() if offset != None: dt = dt + timedelta(offset) return dt if observance == None else observance(dt)
def double_nine_festival(year, offset=None, observance=None): dt = LunarDate(year, 9, 9).toSolarDate() if offset != None: dt = dt + timedelta(offset) return dt if observance == None else observance(dt)
def mid_autumn_festival(year, offset=None, observance=None): dt = LunarDate(year, 8, 15).toSolarDate() if offset != None: dt = dt + timedelta(offset) return dt if observance == None else observance(dt)
def dragon_boat_festival(year, offset=None, observance=None): dt = LunarDate(year, 5, 5).toSolarDate() if offset != None: dt = dt + timedelta(offset) return dt if observance == None else observance(dt)
def buddha_birthday(year, offset=None, observance=None): dt = LunarDate(year, 4, 8).toSolarDate() if offset != None: dt = dt + timedelta(offset) return dt if observance == None else observance(dt)