【问题标题】:datetime excluding weekend in djangodjango 中不包括周末的日期时间
【发布时间】:2015-01-23 09:30:35
【问题描述】:

我的日期时间有问题,我需要过去 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 django datetime


    【解决方案1】:

    分两个阶段创建date_list

    # 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)]
    

    【讨论】:

      【解决方案2】:

      Python 端(较慢,因为数据被拉到应用程序,然后过滤)

      如果正如操作员的评论所述,日期在数据库中存储为VARCHAR 而不是DATEDATETIME(坏主意),您可以使用Python 将它们转换为date 或@ 987654327@python时间,然后在pythondatetimedate对象上使用.weekday()过滤掉周六(5)和周日(6),例如

      without_weekends = [book for book in books if book.date.weekday() not in [5, 6]]
      

      https://docs.python.org/2/library/datetime.html

      数据库端(更好的是,数据存储为DATE/DATETIME,过滤发生在DB端,因此只有相关数据被发送回应用程序)

      Django 有一个week_day 查找,适用于日期/日期时间类型:https://docs.djangoproject.com/en/dev/ref/models/querysets/#week-day

      但我得到了包括周末在内的所有日期

      您可以将周末排除在您想要的范围之外,例如执行 Book.objects.filter(...).exclude(date__week_day__in=[1, 7]) 以从查询集中删除星期日 (1) 和星期六 (7)

      【讨论】:

      • 在数据库中,我将 startdate 存储为 varchar 而不是日期时间。
      • 我认为在 VARCHAR 类型而不是 DATETIME 类型上执行 __range=(a, b) 是个坏主意,但我使用 Python 解决方案进行了更新
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2012-08-06
      • 2011-03-22
      相关资源
      最近更新 更多