公司最近有一个需求需要给后端提供一份万年历数据。显示一年中的每一天是工作日就还是节假日。网上有一些api接口,当然这些接口时需要收费的。我整理了一下网上的资料,写了一些代码来完成这个任务。
首先获取一年中的所有日期:
def isLeapYear(years):
'''
通过判断闰年,获取年份years下一年的总天数
:param years: 年份,int
:return:days_sum,一年的总天数
'''
# 断言:年份不为整数时,抛出异常。
assert isinstance(years, int)
if ((years % 4 == 0 and years % 100 != 0) or (years % 400 == 0)): # 判断是否是闰年
# print(years, "是闰年")
days_sum = 366
return days_sum
else:
# print(years, '不是闰年')
days_sum = 365
return days_sum
def getAllDayPerYear(years):
'''
获取一年的所有日期
:param years:年份
:return:全部日期列表
'''
start_date = '%s-1-1' % years
a = 0
all_date_list = []
days_sum = isLeapYear(int(years))
while a < days_sum:
b = arrow.get(start_date).shift(days=a).format("YYYY-MM-DD")
a += 1
yield b
然后安装chinese_calendar
githup地址:https://github.com/LKI/chinese-calendar
all_date_list = getAllDayPerYear("2019")
url = 'https://www.baidu.com/'
for date in all_date_list:
item = {}
startTime = datetime.datetime.strptime(date, '%Y-%m-%d')
from chinese_calendar import is_workday, is_holiday
date_type = '节假日'
if is_workday(startTime):
date_type = '工作日'
item['date_time'] = date
item['date_type'] = date_type
print(item)
输出结果如下: