在Python中检查星期几

时间:2019-03-29 18:53:26

标签: python datetime

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

代码是:

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

4 个答案:

答案 0 :(得分:0)

您的date函数的参数isholiday遮盖了datetime.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

答案 1 :(得分:0)

我想你是说这个意思

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

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

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

答案 2 :(得分:0)

使用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)

礼物:

  

是假期

可能的副本:How do I get the day of week given a date in Python?

答案 3 :(得分:0)

我这样修改了您的代码:

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。