不带日历模块的python中从日期开始的星期几

2024-09-30 03:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个函数[day]=weekday(M, D, Y),它告诉你一周中的第几天是M/D/Y。告诉你的用户接受的日期范围是什么。请勿使用任何特定于日历的模块或功能。在

我找到了这两段代码,但我不明白它们背后的逻辑。更具体地说,我不知道偏移量是从哪里来的。在

def weekday(M,D,Y):
    offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
    week   = ['Sunday', 
              'Monday', 
              'Tuesday', 
              'Wednesday', 
              'Thursday',
              'Friday', 
              'Saturday']
    afterFeb = 1
    if M > 2: afterFeb = 0
    aux = Y - 1700 - afterFeb
    # dayOfWeek for 1700/1/1 = 5, Friday
    dayOfWeek  = 5
    # partial sum of days betweem current date and 1700/1/1
    dayOfWeek += (aux + afterFeb) * 365
    # leap year correction
    dayOfWeek += aux / 4 - aux / 100 + (aux + 100) / 400
    # sum monthly and day offsets
    dayOfWeek += offset[M - 1] + (D - 1)
    dayOfWeek %= 7
    return dayOfWeek, week[dayOfWeek]

def weekday(m, d, y):
    # following numbers in the array are suggested by Sakamoto, Lachman, 
    Keith and Craver
    # one for each month
    # and the remaining logic as well
    t = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
    y = y - (m<3)
    day = (y + y/4 - y/100 + y/400 + t[m-1] + d)%7;
    # from 0 to 6, weekdays
    if day == 0:
    print "Sunday"
    elif day == 1:
    print "Monday"
    elif day == 2:
    print "Tuesday"
    elif day == 3:
    print "Wednesday"
    elif day == 4:
    print "Thursday"
    elif day == 5:
    print "Friday"
    elif day == 6:
    print "Saturday"

Tags: anddefoffsetprintweekelifmondayday
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:12

把1月1日定为1月1日星期五。它计算年、月、日的差额。这些补偿是月份的累计数字。对简来说,你不需要加任何数字。仅添加0。对于二月,一个人必须增加一月份的31天,对于三月,一个人增加了一月份的31天和二月的28天(总共59天)。等等

相关问题 更多 >

    热门问题