尝试将 Zeller 的公式用于 return 一周中的几天,使用 python

Trying to use Zeller’s formula to return days of the week using python

我看到了 java 个代码,但无法将它们与 python 进行完全比较。我正在尝试使用 Zeller 的一致性来查找任何日期的星期几。

泽勒公式假定对于公式中的每个计算,其中有一个 商(或两个数的除法),则使用该计算的整数值。如果月份是一月或二月,则将 12 添加到该月,然后将 1 在计算日之前从年中减去。 day = (((13*m+3) / 5 + d + y + (y / 4) - (y / 100) + (y / 400)) %7).

day_names =[('Monday'),'Tuesday','Wednesday','Thursday','Friday','Saturday', 'Sunday']

例如 day_names[0] = 'Monday' 和 day_names[6] = 'Sunday'

下面似乎从来没有给我正确的日期,有没有人能说出我做错了什么,如果不是所有的话?

def day_of_week1(d, m, y):
    d=1<=d<=31
    m=1<=m<=12
    y=1<=y<=10**5
    if m in range (1,2):
        m=m+12
        y=y-1
    day_names =[('Monday'),'Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
    day =(((13*m+3) / 5 + d + y + (y / 4) - (y / 100) + (y / 400)) %7)
    day=(math.ceil(day))
    if 2>day>=1:
        return day_names[0]
    elif 3>day>=2:
        return day_names[1]
    elif 4>day>=3:
        return day_names[2]
    elif 5>day>=4:
        return day_names[3]
    elif 6>day>=5:
        return day_names[4]
    elif 7>day>=6:
        return day_names[5]
    elif 8>day>=7:
        return day_names[6]

使用 calendar 模块中的日期名称。此外,该月的调整不符合 Zeller 规则。试试这个:

import calendar

def day_of_week(d, m, y):
    if m < 3:
        y -= 1
        m += 10
    else:
        m -= 2
    yc, yd = divmod(y, 100)
    r = d + (13 * m - 1) // 5 + yd + yd // 4 + yc // 4 - 2 * yc
    return calendar.day_name[r % 7 - 1]

print(day_of_week(9, 11, 1951))

输出:

Friday