计算某年某月某日是星期几 Python

前提:公元1年1月1日是星期一
def date(y,m,d):
    ans = 0
    month = [31,29,31,30,31,30,31,31,30,31,30,31]

    if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
        month[1] = 29
    else:
        month[1] = 28

    for i in range(1,y):  # 注意计算之前年的天数时要从1开始计算
        if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:
            ans += 366
            # ans = ans % 7
        else:
            ans += 365
            # ans = ans % 7

    for i in range(m-1):   # 这里因为月份是由数组表示的,从1月加到m-1月在数组中就是从下标0加到下标m-2
        ans +=  month[i]
        # ans = ans % 7


    ans += (d-1)  # 这里的d-1,是因为天数的计算是基于公元1年1月1日来计算的,所以d要减去1

    return ans%7  # 最后这里对7取余也可以,如果计算的年数过多可以边加天数,边对7取余,就像注释掉的那些代码一样

或者 基姆拉尔森公式

def date(y,m,d):
	if(m==1 || m==2): # 1月、2月 要当成去年的13月和14月,因此y要减一
		y -= 1, m += 12;
	return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值