为了数清还有几天到周末,我用python绘制了日历

日历的秘密

昨天,在看小侄子写作业的时候,发现了一个秘密:他在“演算纸”(计算数学题用的草纸)上画了非常多的日历。对此我感到了非常的困惑,“这是做什么的?”

后来,经过了我不懈的追问,小侄子终于说出了实情,“在学校太无聊,所以经常画日历,看看还有几天放假。”

哦!原来是这样!虽然这种行为不值得提倡,但是,小侄子想要放假的心情是可以理解的。所以,我决定帮帮他,研究一下怎么用python绘制出日历。

计算节假日

节假日

众所周知,一周有7天,其中周一到周五是工作日,周六周日是双休日。

每年元旦休息1天,春节休息3天,中秋,端午,清明节各休息1天,劳动节休息1天,国庆节休息3天,总共休息11天。

看起来,只要掌握了节日的规律,就可以知道假期了。但是,由于“调休”,周六周日也不总是休息日,其他工作日也可能变成休息日,所以,不能简单的这样做。

那么,要如何才能够计算出哪些日子是假日呢?答案是,必须要等到每年公布节假日才行。然后,根据公布的结果,进行手动标注。这听起来很麻烦,有没有什么更好的办法可以一劳永逸的解决问题呢?

使用中国日历库

安装:pip install chinesecalendar

升级:pip install -U chinesecalendar

中国日历是一个现有的库,可以方便的提供每一天是否是中国的节假日,是什么假日。其实现原理是,该日历库的作者为我们标注好了每一年的节假日,只需要调用即可。

import datetime
import calendar
import chinese_calendar as cc


def day_in_month(year, month):
    info = []
    days_in_month = calendar.monthrange(year, month)[1]
    for day in range(1, days_in_month + 1):
        date = datetime.datetime(year, month, day)
        weekday = date.weekday()
        on_holiday, holiday_name = cc.get_holiday_detail(date)
        info.append({
            "day": f"{year}-{month}-{day}",
            "weekday": weekday + 1,
            "on_holiday": on_holiday,
            "holiday_name": holiday_name
        })
    return info

print(day_in_month(2024, 11))

不过需要注意的是:由于该库中的节假日都是作者添加的,所以,在不更新升级的情况下,节假日是不会增多的。例如,现在还没有公布2025年的节假日,那么该库就不能处理2025年的节假日。需要在该库更新以后,手动更新该库,才可以用上最新实现,这听起来不太友好。毕竟,如果在网络受限的环境中,或者没有及时更新,即使已经到了新的年份,旧有的程序也不能很好工作。

使用爬虫程序

另一种想法就是,通过发送网络请求,从网络信息上得到最新的节假日信息。这样,信息总是新的,而且,也不需要更新库,就可以一直使用旧有程序(假设网络地址持续有效,且结构没有发生更改)。

当然,我是非常不推荐这种方法的,与之前的方法不同,该方法虽然可以在不主动更新的情况下持续有效,但是没办法用于没有网络的环境。当然更重要的是,未经许可的爬虫行为并非是一种好的行为,如无必要应该尽量减少或者避免。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值