关于 chinesecalendar 在年初的报错

问题原因

在 2024 年 1 月 2 日第一个工作日发现使用了 chinesecalendar 包的程序报错:

NotImplementedError: no available data for year 2024, only year between [2004, 2023] supported

解决

如报错所说,查看源代码,

date = _validate_date(date)
def _validate_date(*dates):
    """
    check if the date(s) is supported

    :type date: datetime.date | datetime.datetime
    :rtype: datetime.date | list[datetime.date]
    """
    if len(dates) != 1:
        return list(map(_validate_date, dates))
    date = _wrap_date(dates[0])
    if not isinstance(date, datetime.date):
        raise NotImplementedError("unsupported type {}, expected type is datetime.date".format(type(date)))
    min_year, max_year = min(holidays.keys()).year, max(holidays.keys()).year
    if not (min_year <= date.year <= max_year):
        raise NotImplementedError(
            "no available data for year {}, only year between [{}, {}] supported".format(date.year, min_year, max_year)
        )
    return date
holidays = {
    datetime.date(year=2004, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2004, month=1, day=22): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=23): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=24): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=25): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2004, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2004, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2005, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2005, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2005, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2005, month=2, day=9): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=10): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=13): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2005, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2005, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2006, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2006, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2006, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2006, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2006, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2006, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2006, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2006, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2007, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2007, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2007, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2007, month=2, day=18): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=21): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=22): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=23): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=24): Holiday.spring_festival.value,
    datetime.date(year=2007, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2007, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2007, month=12, day=30): Holiday.new_years_day.value,
    datetime.date(year=2007, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2008, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2008, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=9): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=10): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2008, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2008, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2008, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2008, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2008, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2008, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2008, month=6, day=7): Holiday.dragon_boat_festival.value,
    datetime.date(year=2008, month=6, day=8): Holiday.dragon_boat_festival.value,
    datetime.date(year=2008, month=6, day=9): Holiday.dragon_boat_festival.value,
    datetime.date(year=2008, month=9, day=13): Holiday.mid_autumn_festival.value,
    datetime.date(year=2008, month=9, day=14): Holiday.mid_autumn_festival.value,
    datetime.date(year=2008, month=9, day=15): Holiday.mid_autumn_festival.value,
    datetime.date(year=2008, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2008, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2008, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2008, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2008, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2008, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2008, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2009, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2009, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2009, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2009, month=1, day=25): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2009, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2009, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2009, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2009, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2009, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2009, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2009, month=5, day=28): Holiday.dragon_boat_festival.value,
    datetime.date(year=2009, month=5, day=29): Holiday.dragon_boat_festival.value,
    datetime.date(year=2009, month=5, day=30): Holiday.dragon_boat_festival.value,
    datetime.date(year=2009, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=3): Holiday.mid_autumn_festival.value,
    datetime.date(year=2009, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2010, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2010, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2010, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2010, month=2, day=13): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=16): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=18): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2010, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2010, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2010, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2010, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2010, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2010, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2010, month=6, day=14): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=6, day=15): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=6, day=16): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=9, day=22): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=9, day=23): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=9, day=24): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2011, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2011, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2011, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2011, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2011, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2011, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2011, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2011, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2011, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2011, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2011, month=6, day=4): Holiday.dragon_boat_festival.value,
    datetime.date(year=2011, month=6, day=6): Holiday.dragon_boat_festival.value,
    datetime.date(year=2011, month=9, day=10): Holiday.mid_autumn_festival.value,
    datetime.date(year=2011, month=9, day=11): Holiday.mid_autumn_festival.value,
    datetime.date(year=2011, month=9, day=12): Holiday.mid_autumn_festival.value,
    datetime.date(year=2011, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2012, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2012, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2012, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2012, month=1, day=22): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=23): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=24): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=25): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2012, month=4, day=2): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2012, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2012, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2012, month=6, day=22): Holiday.dragon_boat_festival.value,
    datetime.date(year=2012, month=6, day=24): Holiday.dragon_boat_festival.value,
    datetime.date(year=2012, month=9, day=30): Holiday.mid_autumn_festival.value,
    datetime.date(year=2012, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2012, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2013, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2013, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2013, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2013, month=2, day=9): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=10): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=13): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2013, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2013, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2013, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2013, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2013, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2013, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2013, month=6, day=10): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=6, day=11): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=6, day=12): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=9, day=19): Holiday.mid_autumn_festival.value,
    datetime.date(year=2013, month=9, day=20): Holiday.mid_autumn_festival.value,
    datetime.date(year=2013, month=9, day=21): Holiday.mid_autumn_festival.value,
    datetime.date(year=2013, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2014, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2014, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2014, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2014, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2014, month=4, day=7): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2014, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2014, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2014, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2014, month=6, day=2): Holiday.dragon_boat_festival.value,
    datetime.date(year=2014, month=9, day=8): Holiday.mid_autumn_festival.value,
    datetime.date(year=2014, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2015, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2015, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2015, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2015, month=2, day=18): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=21): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=22): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=23): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=24): Holiday.spring_festival.value,
    datetime.date(year=2015, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2015, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2015, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2015, month=6, day=20): Holiday.dragon_boat_festival.value,
    datetime.date(year=2015, month=6, day=22): Holiday.dragon_boat_festival.value,
    datetime.date(year=2015, month=9, day=3): Holiday.anti_fascist_70th_day.value,
    datetime.date(year=2015, month=9, day=4): Holiday.anti_fascist_70th_day.value,
    datetime.date(year=2015, month=9, day=27): Holiday.mid_autumn_festival.value,
    datetime.date(year=2015, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2015, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2016, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2016, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=9): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=10): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=13): Holiday.spring_festival.value,
    datetime.date(year=2016, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2016, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2016, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2016, month=6, day=9): Holiday.dragon_boat_festival.value,
    datetime.date(year=2016, month=6, day=10): Holiday.dragon_boat_festival.value,
    datetime.date(year=2016, month=6, day=11): Holiday.dragon_boat_festival.value,
    datetime.date(year=2016, month=9, day=15): Holiday.mid_autumn_festival.value,
    datetime.date(year=2016, month=9, day=16): Holiday.mid_autumn_festival.value,
    datetime.date(year=2016, month=9, day=17): Holiday.mid_autumn_festival.value,
    datetime.date(year=2016, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2017, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2017, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2017, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2017, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2017, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2017, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2017, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2017, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2017, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2017, month=4, day=2): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2017, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2017, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2017, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2017, month=5, day=28): Holiday.dragon_boat_festival.value,
    datetime.date(year=2017, month=5, day=29): Holiday.dragon_boat_festival.value,
    datetime.date(year=2017, month=5, day=30): Holiday.dragon_boat_festival.value,
    datetime.date(year=2017, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=4): Holiday.mid_autumn_festival.value,
    datetime.date(year=2017, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2017, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2018, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2018, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=16): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=18): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=21): Holiday.spring_festival.value,
    datetime.date(year=2018, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2018, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2018, month=4, day=7): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2018, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2018, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2018, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2018, month=6, day=18): Holiday.dragon_boat_festival.value,
    datetime.date(year=2018, month=9, day=24): Holiday.mid_autumn_festival.value,
    datetime.date(year=2018, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2018, month=12, day=30): Holiday.new_years_day.value,
    datetime.date(year=2018, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2019, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2019, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=9): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=10): Holiday.spring_festival.value,
    datetime.date(year=2019, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2019, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2019, month=4, day=7): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2019, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2019, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2019, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2019, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2019, month=6, day=7): Holiday.dragon_boat_festival.value,
    datetime.date(year=2019, month=6, day=8): Holiday.dragon_boat_festival.value,
    datetime.date(year=2019, month=6, day=9): Holiday.dragon_boat_festival.value,
    datetime.date(year=2019, month=9, day=13): Holiday.mid_autumn_festival.value,
    datetime.date(year=2019, month=9, day=14): Holiday.mid_autumn_festival.value,
    datetime.date(year=2019, month=9, day=15): Holiday.mid_autumn_festival.value,
    datetime.date(year=2019, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2020, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2020, month=1, day=24): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=25): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2020, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2020, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2020, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2020, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2020, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2020, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2020, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2020, month=6, day=25): Holiday.dragon_boat_festival.value,
    datetime.date(year=2020, month=6, day=26): Holiday.dragon_boat_festival.value,
    datetime.date(year=2020, month=6, day=27): Holiday.dragon_boat_festival.value,
    datetime.date(year=2020, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2021, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2021, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2021, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2021, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=13): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=16): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2021, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2021, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2021, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2021, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2021, month=6, day=12): Holiday.dragon_boat_festival.value,
    datetime.date(year=2021, month=6, day=13): Holiday.dragon_boat_festival.value,
    datetime.date(year=2021, month=6, day=14): Holiday.dragon_boat_festival.value,
    datetime.date(year=2021, month=9, day=19): Holiday.mid_autumn_festival.value,
    datetime.date(year=2021, month=9, day=20): Holiday.mid_autumn_festival.value,
    datetime.date(year=2021, month=9, day=21): Holiday.mid_autumn_festival.value,
    datetime.date(year=2021, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2022, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2022, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2022, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2022, month=1, day=31): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2022, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2022, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2022, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2022, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2022, month=6, day=3): Holiday.dragon_boat_festival.value,
    datetime.date(year=2022, month=6, day=4): Holiday.dragon_boat_festival.value,
    datetime.date(year=2022, month=6, day=5): Holiday.dragon_boat_festival.value,
    datetime.date(year=2022, month=9, day=10): Holiday.mid_autumn_festival.value,
    datetime.date(year=2022, month=9, day=11): Holiday.mid_autumn_festival.value,
    datetime.date(year=2022, month=9, day=12): Holiday.mid_autumn_festival.value,
    datetime.date(year=2022, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2022, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2023, month=1, day=1): Holiday.new_years_day.value,
    datetime.date(year=2023, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2023, month=1, day=21): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=22): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=23): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=24): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=25): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2023, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2023, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2023, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2023, month=5, day=1): Holiday.labour_day.value,
    datetime.date(year=2023, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2023, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2023, month=6, day=22): Holiday.dragon_boat_festival.value,
    datetime.date(year=2023, month=6, day=23): Holiday.dragon_boat_festival.value,
    datetime.date(year=2023, month=6, day=24): Holiday.dragon_boat_festival.value,
    datetime.date(year=2023, month=9, day=29): Holiday.mid_autumn_festival.value,
    datetime.date(year=2023, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=1): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=2): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=3): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=6): Holiday.national_day.value,
}

workdays = {
    datetime.date(year=2004, month=1, day=17): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=18): Holiday.spring_festival.value,
    datetime.date(year=2004, month=5, day=8): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=9): Holiday.labour_day.value,
    datetime.date(year=2004, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=10): Holiday.national_day.value,
    datetime.date(year=2005, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2005, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=8): Holiday.labour_day.value,
    datetime.date(year=2005, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2006, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2006, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2006, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2006, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2006, month=12, day=30): Holiday.new_years_day.value,
    datetime.date(year=2006, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2007, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=25): Holiday.spring_festival.value,
    datetime.date(year=2007, month=4, day=28): Holiday.labour_day.value,
    datetime.date(year=2007, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2007, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2007, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2007, month=12, day=29): Holiday.new_years_day.value,
    datetime.date(year=2008, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2008, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2008, month=9, day=27): Holiday.national_day.value,
    datetime.date(year=2008, month=9, day=28): Holiday.national_day.value,
    datetime.date(year=2009, month=1, day=4): Holiday.new_years_day.value,
    datetime.date(year=2009, month=1, day=24): Holiday.spring_festival.value,
    datetime.date(year=2009, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2009, month=5, day=31): Holiday.dragon_boat_festival.value,
    datetime.date(year=2009, month=9, day=27): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=10): Holiday.national_day.value,
    datetime.date(year=2010, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=21): Holiday.spring_festival.value,
    datetime.date(year=2010, month=6, day=12): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=6, day=13): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=9, day=19): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=9, day=25): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=9, day=26): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2011, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2011, month=4, day=2): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2011, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2011, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2012, month=1, day=21): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2012, month=3, day=31): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=1): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=28): Holiday.labour_day.value,
    datetime.date(year=2012, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2013, month=1, day=5): Holiday.new_years_day.value,
    datetime.date(year=2013, month=1, day=6): Holiday.new_years_day.value,
    datetime.date(year=2013, month=2, day=16): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2013, month=4, day=7): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2013, month=4, day=27): Holiday.labour_day.value,
    datetime.date(year=2013, month=4, day=28): Holiday.labour_day.value,
    datetime.date(year=2013, month=6, day=8): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=6, day=9): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=9, day=22): Holiday.mid_autumn_festival.value,
    datetime.date(year=2013, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=12): Holiday.national_day.value,
    datetime.date(year=2014, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2014, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2014, month=9, day=28): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=11): Holiday.national_day.value,
    datetime.date(year=2015, month=1, day=4): Holiday.new_years_day.value,
    datetime.date(year=2015, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=28): Holiday.spring_festival.value,
    datetime.date(year=2015, month=9, day=6): Holiday.anti_fascist_70th_day.value,
    datetime.date(year=2015, month=10, day=10): Holiday.national_day.value,
    datetime.date(year=2016, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2016, month=6, day=12): Holiday.dragon_boat_festival.value,
    datetime.date(year=2016, month=9, day=18): Holiday.mid_autumn_festival.value,
    datetime.date(year=2016, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2017, month=1, day=22): Holiday.spring_festival.value,
    datetime.date(year=2017, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2017, month=4, day=1): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2017, month=5, day=27): Holiday.dragon_boat_festival.value,
    datetime.date(year=2017, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2018, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=24): Holiday.spring_festival.value,
    datetime.date(year=2018, month=4, day=8): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2018, month=4, day=28): Holiday.labour_day.value,
    datetime.date(year=2018, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2018, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2018, month=12, day=29): Holiday.new_years_day.value,
    datetime.date(year=2019, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2019, month=4, day=28): Holiday.labour_day.value,
    datetime.date(year=2019, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2019, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=12): Holiday.national_day.value,
    datetime.date(year=2020, month=1, day=19): Holiday.spring_festival.value,
    datetime.date(year=2020, month=4, day=26): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=9): Holiday.labour_day.value,
    datetime.date(year=2020, month=6, day=28): Holiday.dragon_boat_festival.value,
    datetime.date(year=2020, month=9, day=27): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=10): Holiday.national_day.value,
    datetime.date(year=2021, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2021, month=4, day=25): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=8): Holiday.labour_day.value,
    datetime.date(year=2021, month=9, day=18): Holiday.mid_autumn_festival.value,
    datetime.date(year=2021, month=9, day=26): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2022, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2022, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2022, month=4, day=2): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2022, month=4, day=24): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2022, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=9): Holiday.national_day.value,
    datetime.date(year=2023, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2023, month=4, day=23): Holiday.labour_day.value,
    datetime.date(year=2023, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2023, month=6, day=25): Holiday.dragon_boat_festival.value,
    datetime.date(year=2023, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=8): Holiday.national_day.value,
}

in_lieu_days = {
    datetime.date(year=2004, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2004, month=1, day=28): Holiday.spring_festival.value,
    datetime.date(year=2004, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2004, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2004, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2004, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2005, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2005, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2005, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2005, month=5, day=6): Holiday.labour_day.value,
    datetime.date(year=2005, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2005, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2006, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2006, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2006, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2006, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2006, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2006, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2007, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2007, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2007, month=2, day=22): Holiday.spring_festival.value,
    datetime.date(year=2007, month=2, day=23): Holiday.spring_festival.value,
    datetime.date(year=2007, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2007, month=5, day=7): Holiday.labour_day.value,
    datetime.date(year=2007, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2007, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2007, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2008, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2008, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2008, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2008, month=9, day=29): Holiday.national_day.value,
    datetime.date(year=2008, month=9, day=30): Holiday.national_day.value,
    datetime.date(year=2009, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2009, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2009, month=1, day=30): Holiday.spring_festival.value,
    datetime.date(year=2009, month=5, day=29): Holiday.dragon_boat_festival.value,
    datetime.date(year=2009, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2009, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2010, month=2, day=18): Holiday.spring_festival.value,
    datetime.date(year=2010, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2010, month=6, day=14): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=6, day=15): Holiday.dragon_boat_festival.value,
    datetime.date(year=2010, month=9, day=23): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=9, day=24): Holiday.mid_autumn_festival.value,
    datetime.date(year=2010, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2010, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2011, month=2, day=7): Holiday.spring_festival.value,
    datetime.date(year=2011, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2011, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2011, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2011, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2012, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2012, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2012, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2012, month=4, day=2): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2012, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2012, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2013, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2013, month=1, day=3): Holiday.new_years_day.value,
    datetime.date(year=2013, month=2, day=14): Holiday.spring_festival.value,
    datetime.date(year=2013, month=2, day=15): Holiday.spring_festival.value,
    datetime.date(year=2013, month=4, day=5): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2013, month=4, day=29): Holiday.labour_day.value,
    datetime.date(year=2013, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2013, month=6, day=10): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=6, day=11): Holiday.dragon_boat_festival.value,
    datetime.date(year=2013, month=9, day=20): Holiday.mid_autumn_festival.value,
    datetime.date(year=2013, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2013, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2014, month=2, day=5): Holiday.spring_festival.value,
    datetime.date(year=2014, month=2, day=6): Holiday.spring_festival.value,
    datetime.date(year=2014, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2014, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2014, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2015, month=1, day=2): Holiday.new_years_day.value,
    datetime.date(year=2015, month=2, day=23): Holiday.spring_festival.value,
    datetime.date(year=2015, month=2, day=24): Holiday.spring_festival.value,
    datetime.date(year=2015, month=9, day=4): Holiday.anti_fascist_70th_day.value,
    datetime.date(year=2015, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2016, month=2, day=11): Holiday.spring_festival.value,
    datetime.date(year=2016, month=2, day=12): Holiday.spring_festival.value,
    datetime.date(year=2016, month=6, day=10): Holiday.dragon_boat_festival.value,
    datetime.date(year=2016, month=9, day=16): Holiday.mid_autumn_festival.value,
    datetime.date(year=2016, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2016, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2017, month=2, day=1): Holiday.spring_festival.value,
    datetime.date(year=2017, month=2, day=2): Holiday.spring_festival.value,
    datetime.date(year=2017, month=4, day=3): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2017, month=5, day=29): Holiday.dragon_boat_festival.value,
    datetime.date(year=2017, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2018, month=2, day=19): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=20): Holiday.spring_festival.value,
    datetime.date(year=2018, month=2, day=21): Holiday.spring_festival.value,
    datetime.date(year=2018, month=4, day=6): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2018, month=4, day=30): Holiday.labour_day.value,
    datetime.date(year=2018, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2018, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2018, month=12, day=31): Holiday.new_years_day.value,
    datetime.date(year=2019, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2019, month=2, day=8): Holiday.spring_festival.value,
    datetime.date(year=2019, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2019, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2019, month=10, day=4): Holiday.national_day.value,
    datetime.date(year=2019, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2020, month=1, day=29): Holiday.spring_festival.value,
    datetime.date(year=2020, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2020, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2020, month=6, day=26): Holiday.dragon_boat_festival.value,
    datetime.date(year=2020, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2020, month=10, day=8): Holiday.national_day.value,
    datetime.date(year=2021, month=2, day=16): Holiday.spring_festival.value,
    datetime.date(year=2021, month=2, day=17): Holiday.spring_festival.value,
    datetime.date(year=2021, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2021, month=5, day=5): Holiday.labour_day.value,
    datetime.date(year=2021, month=9, day=20): Holiday.mid_autumn_festival.value,
    datetime.date(year=2021, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2021, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2022, month=2, day=3): Holiday.spring_festival.value,
    datetime.date(year=2022, month=2, day=4): Holiday.spring_festival.value,
    datetime.date(year=2022, month=4, day=4): Holiday.tomb_sweeping_day.value,
    datetime.date(year=2022, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2022, month=5, day=4): Holiday.labour_day.value,
    datetime.date(year=2022, month=10, day=6): Holiday.national_day.value,
    datetime.date(year=2022, month=10, day=7): Holiday.national_day.value,
    datetime.date(year=2023, month=1, day=26): Holiday.spring_festival.value,
    datetime.date(year=2023, month=1, day=27): Holiday.spring_festival.value,
    datetime.date(year=2023, month=5, day=2): Holiday.labour_day.value,
    datetime.date(year=2023, month=5, day=3): Holiday.labour_day.value,
    datetime.date(year=2023, month=6, day=23): Holiday.dragon_boat_festival.value,
    datetime.date(year=2023, month=10, day=5): Holiday.national_day.value,
    datetime.date(year=2023, month=10, day=6): Holiday.national_day.value,
}

原来是写死的 … 对于长期的跨年项目太不友好了吧…

解决方案

升级安装包:

>> pip uninstall chinesecalendar
Found existing installation: chinesecalendar 1.8.0
Uninstalling chinesecalendar-1.8.0:
  Would remove:
    /Users/furuiyang/PyEnv/Demo/lib/python3.8/site-packages/chinese_calendar/*
    /Users/furuiyang/PyEnv/Demo/lib/python3.8/site-packages/chinesecalendar-1.8.0.dist-info/*
Proceed (Y/n)? Y
  Successfully uninstalled chinesecalendar-1.8.0

>> pip install chinesecalendar
Collecting chinesecalendar
  Downloading chinesecalendar-1.9.0-py2.py3-none-any.whl.metadata (3.0 kB)
Downloading chinesecalendar-1.9.0-py2.py3-none-any.whl (11 kB)
DEPRECATION: celery 5.1.2 has a non-standard dependency specifier pytz>dev. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of celery or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063
DEPRECATION: uvicorn 0.14.0 has a non-standard dependency specifier click>=7.*. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of uvicorn or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063
Installing collected packages: chinesecalendar
Successfully installed chinesecalendar-1.9.0
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值