【问题标题】:Function to get a weekday from a date in Python从 Python 中的日期获取工作日的函数
【发布时间】:2021-02-15 01:43:33
【问题描述】:

作为 python 教程的一部分,我一直在尝试构建一个函数来计算给定日期的工作日。我知道有一种更简单的方法可以做到这一点,但我真的很想知道为什么我的功能不起作用。每当我输入日期时,它都会返回 None。我会很感激任何建议。 代码如下:

# check if year is leap year: division by 4 possible, division by 100 impossible unless division by 400 possible
def isYearLeap(year):
    if year % 4 == 0:
        if year % 100 == 0:
            if year % 400 == 0:
                return True
            else:
                return False
        else:
            return True
    else:
        return False


# calculate days in each month
def daysInMonth(year, month):
    if month == 9 or month == 4 or month == 6 or month == 11:
        return 30
    elif month == 2:
        if isYearLeap(year):
            return 29
        else:
            return 28
    elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        return 31
    else:
        return False


# find out day of the year
def dayOfYear(year, month, day):
    century = year // 100
    # different rule for January and February because of leap years`enter code here`
    if month != 1 or month != 2:
        y = year % 100
        # Zeller's rule for calculating weekdays
        weekday = (day + (2.6 * (month - 2) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7
        if weekday == 1:
            return "Sunday"
        elif weekday == 2:
            return "Monday"
        elif weekday == 3:
            return "Tuesday"
        elif weekday == 4:
            return "Wednesday"
        elif weekday == 5:
            return "Thursday"
        elif weekday == 6:
            return "Friday"
        elif weekday == 0:
            return "Saturday"
    else:
        y = (year % 100) - 1
        #Zeller's rule for calculating weekdays
        weekday = (day + (2.6 * (month + 10) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7
        if weekday == 1:
            return "Sunday"
        elif weekday == 2:
            return "Monday"
        elif weekday == 3:
            return "Tuesday"
        elif weekday == 4:
            return "Wednesday"
        elif weekday == 5:
            return "Thursday"
        elif weekday == 6:
            return "Friday"
        elif weekday == 0:
            return "Saturday"


print(dayOfYear(2000, 12, 31))
print(dayOfYear(1980, 1, 4))

【问题讨论】:

  • 我觉得这个更适合codereview.stackexchange.com
  • 与问题的原因无关,但仍然:if month != 1 or month != 2 条件始终为True。也许你的意思是if month != 1 and month != 2
  • @Dani:不。代码审查是针对工作代码的,它侧重于样式和效率。

标签: python function date if-statement weekday


【解决方案1】:

问题出在这一行:

weekday = (day + (2.6 * (month - 2) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7

计算返回一个浮点值,但您的 if/elif 语句会检查变量是否包含特定的整数值。

您可以通过将值四舍五入为 int 或将它们转换为 int 来解决它(您必须检查转换为整数后计算是否仍然正确):

weekday = int((day + (2.6 * (month - 2) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7)

【讨论】:

  • 谢谢,我已将值四舍五入为 int,但我仍然得到错误的工作日。
  • print(dayOfYear(2000, 12, 31)) 返回正确的星期日 print(dayOfYear(1980, 1, 4)) 虽然应该是星期三返回星期四
  • 没关系,我发现了问题。我必须使用 // 作为除法的运算符。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2021-12-09
  • 2021-04-25
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
相关资源
最近更新 更多