Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime不包括django的周末_Python_Django_Datetime - Fatal编程技术网

Python datetime不包括django的周末

Python datetime不包括django的周末,python,django,datetime,Python,Django,Datetime,我有一个关于我的约会时间的问题,我需要一个不包括周末的最后15天的约会,我正在解决这个问题,但我得到了所有的日期,包括周末。 这是我的密码:- days_to_show = 15 start_date = datetime.date.today() - datetime.timedelta(days=days_to_show) #print start_date query = Book.objects.values('startdate').order_by('time

我有一个关于我的约会时间的问题,我需要一个不包括周末的最后15天的约会,我正在解决这个问题,但我得到了所有的日期,包括周末。 这是我的密码:-

days_to_show = 15
    start_date = datetime.date.today() - datetime.timedelta(days=days_to_show)
    #print start_date
    query = Book.objects.values('startdate').order_by('timeid') \
           .annotate(spent=Sum('spent')) \
           .filter(project_id=project_id,
                   startdate__range=(start_date, datetime.datetime.now()))

    spent_dict = dict((d['startdate'], d['spent']) for d in query)
    date_list = [str((start_date) + (datetime.timedelta(days=day)))
                             for day in range(0, days_to_show)]


    sp_data['time'] = [{'startdate': date, "spent":spent_dict.get(str(date),0)}
                             for date in date_list ]
Python端(较慢,因为数据被拉到应用程序,然后被过滤) 如op的评论所述,如果在数据库中日期存储为
VARCHAR
,而不是
DATE
DATETIME
(坏主意),则可以使用Python将其转换为
DATE
DATETIME
Python时间,然后使用
.weekday()
在python上
datetime
date
对象以过滤掉星期六(5)和星期日(6),例如

数据库端(更好的是,数据存储为DATE/DATETIME,并在数据库端进行过滤,因此只将相关数据发送回应用程序) Django有一个
week\u day
查找功能,可用于日期/日期时间类型:

但是我有所有的约会,包括周末


您可以从所需范围中排除周末,例如do
Book.objects.filter(…).exclude(date\uu week\u day\uu in=[1,7])
从查询集中删除星期日(1)和星期六(7)分两个阶段创建
日期列表

# get all dates for the period
date_list = [(start_date) + datetime.timedelta(days=day)
                         for day in range(0, days_to_show)]
# filter out week ends
date_list = [str(date) for date in date_list if date.weekday() not in (5,6)]

在数据库中,我将startdate作为varchar而不是datetime。在
varchar
类型上而不是我认为的
datetime
类型上执行
\u range=(a,b)
是个坏主意,但我用Python解决方案进行了更新
# get all dates for the period
date_list = [(start_date) + datetime.timedelta(days=day)
                         for day in range(0, days_to_show)]
# filter out week ends
date_list = [str(date) for date in date_list if date.weekday() not in (5,6)]