日期范围并在特定时间通过每个日期

Range of dates and go through each date at a certain hour

我正在尝试遍历日期范围 (8/1/19-3/31/20) 并遍历每个日期并打印凌晨 4 点、凌晨 5 点和早上 6 点的计数。但是,我在获取所需日期和迭代时遇到了一些一般性问题。我不断收到各种 datetimedatetime.timedelta 错误。

代码如下:

start = datetime.timedelta(2019, 8, 1)
end = datetime.timedelta(2020, 3, 31)
days = (end - start).days + 1
for i in (start + end for n in range(days)):
    for j in range(4, 7):
        print "Hour: ", i
        print ("Residents: ", Checkin.objects.filter(desk__name="Desk", datetime__hour=i.hour(j)).count())
        print("Guests: ", Guest.objects.filter(desk="Desk", datetime__hour=i.hour(j)).count())

我只是希望有最好的方法来做到这一点,因为我正试图为某人收集这些数据。我目前从这段代码中得到的错误是 timedelta 没有小时属性。我只是希望得到帮助,让这段代码发挥作用。

我正在按日期时间字段过滤 CheckinGuest,即:

datetime = models.DateTimeField(auto_now_add=True)

试试这个:

import datetime

start = datetime.datetime(2019, 8, 1)
end = datetime.datetime(2020, 3, 31)

# increment the start date until it reaches the end
while start <= end:
    for j in range(4, 7):
        i = start.replace(hour=j) # create the datetime with the desired hour
        print("Hour: ", i)
        print("Residents: ", Checkin.objects.filter(desk__name="Desk", datetime__hour=i).count())
        print("Guests: ", Guest.objects.filter(desk="Desk", datetime__hour=i).count())
    start += datetime.timedelta(days=1) # increment the start date

尽量保持您最初的回答风格:

import datetime

start = datetime.datetime(2019, 8, 1)
end = datetime.datetime(2020, 3, 31)
days = (end - start).days + 1


for i in range(days):
    my_datetime = start + datetime.timedelta(days=i)
    print('Processing date', my_datetime)
    for j in range(4, 7):
        my_datetime_with_hour = my_datetime + datetime.timedelta(hours=j)
        print('\t', 'Hour', my_datetime_with_hour)
        q1 = Checkin.objects.filter(
            desk__name="Desk",
            datetime__hour=my_datetime_with_hour.hour,
            )
        q2 = Guest.objects.filter(
            desk="Desk",
            datetime__hour=my_datetime_with_hour.hour,
            )
        print("Residents:", q1.count())
        print("Guests:", q2.count())

这就是我最后做的事情:

beg_date = datetime(2019, 8, 1)
        end_date = datetime(2020, 3, 31)
        residents_in_range = Checkin.objects.filter(desk__name="Robinson Hall", datetime__gte=beg_date, datetime__lte=end_date)
        guests_in_range = Guest.objects.filter(desk__name="Robinson Hall", datetime__gte=beg_date, datetime__lte=end_date)
        rez_by_day = []
        guests_by_day = []
        one_day = timedelta(days=1)
        while beg_date <= end_date:
            rez_by_day.append(residents_in_range.filter(datetime__gte=beg_date, datetime__lt=beg_date+one_day))
            guests_by_day.append(guests_in_range_in_range.filter(datetime__gte=beg_date, datetime__lt=beg_date+one_day))
            beg_date += one_day
        four = []
        five = []
        for day in rez_by_day:
            four.append(day.filter(datetime__hour__gte=4, datetime__hour__lt=5))
            five.append(day.filter(datetime__hour__gte=5, datetime__hour__lt=6))
        for count in four:
            print(count.count())
        for count in five:
            print(count.count())

我让它打印数字,这样我就可以复制并粘贴到一个 excel 文件中,我只是进一步分离列表中的信息,进一步减少和获取我想要的信息

我尝试填写更多代码,但每次我想要不同的数据时,我所做的就是替换大厅和 guests/residents 列表。我不是一口气搞定的。