繁体   English   中英

在Python中检查星期几

[英]Check the day of the week in Python

我正在尝试编写代码以检查是否是星期日或星期六。 但是我收到以下错误:

代码是:

import datetime
def isholiday(date):

    dat0 = date(2019, 3, 23)  # Saturday
    dat1 = date(2019, 3, 24)  # Sunday
    if abs(date - dat0) % 7 == 0 | abs(date - dat1)%7 == 0 :
        print ("is holiday")
    return True

在下一行中,我有:

assert(isholiday(datetime.datetime(2018, 10, 21))==True)

错误是:

     ------------------------------------------------------------------------ 
        ---
        TypeError                                 Traceback (most recent call 
        last)
        <ipython-input-22-87d6e5a340a0> in <module>()
        ----> 1 assert(isholiday(datetime.datetime(2018, 10, 21))==True)

        <ipython-input-21-bb556bebaa01> in isholiday(date)
              2 from datetime import date
              3 def isholiday(date):
        ----> 4     dat0 = date(2019,3,23)
              5     dat1 = date(2019,3,24)
              6     if abs(date - dat0)%7 == 0 | abs(date - dat1)%7 == 0 :

        TypeError: 'datetime.datetime' object is not callable

isholiday函数的参数date isholidaydatetime.date类。 您应该重命名参数以避免这种命名冲突:

def isholiday(dat):
    dat0 = date(2019,3,23) #Saturday
    dat1 = date(2019,3,24)  #Sunday
    if abs(dat - dat0)%7 == 0 | abs(dat - dat1)%7 == 0 :
        print ("is holiday")
        return True

我想你的意思是:

dat0 = datetime.datetime(2019,3,23) #Saturday

dat1 = datetime.datetime(2019,3,24)  #Sunday

当前,您正在函数中使用'date'参数,然后使用括号和参数“调用”它。 仅在初始化时使用。

使用weekday() 同样,您的函数应始终返回某些内容,不仅有时返回True

from datetime import date

def isholiday(dat):
    if dat.weekday() == 6 or dat.weekday == 5: # 6 is Sunday, 5 is Saturday 
        print ("is holiday")
        return True
    return False

assert(isholiday(date(2018, 10, 21))==True)

得到:

是假期

可能的重复: 如何在Python中给定日期作为星期几?

我这样修改了您的代码:

import datetime
def isholiday(date):

    dat0 = datetime.datetime(2019,3,23) #Saturday
    dat1 = datetime.datetime(2019,3,24)  #Sunday
    if abs((date - dat0).days)%7 == 0 or abs((date - dat1).days)%7 == 0:
        print ("is holiday")
        return True

assert(isholiday(datetime.datetime(2018, 10, 21))==True)

您正在尝试调用'date'参数,并且不能像这样调用datetime.dateime对象。 我用datetime.datetime更改了第5行和第6行中的日期。 同样,您不能将abs()函数与datetime.timedelta对象一起使用,就像与整数一起使用一样,因此您应该只获得“ day”。 我为此添加了.days。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM