日期范围并在特定时间通过每个日期
Range of dates and go through each date at a certain hour
我正在尝试遍历日期范围 (8/1/19-3/31/20) 并遍历每个日期并打印凌晨 4 点、凌晨 5 点和早上 6 点的计数。但是,我在获取所需日期和迭代时遇到了一些一般性问题。我不断收到各种 datetime
和 datetime.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 没有小时属性。我只是希望得到帮助,让这段代码发挥作用。
我正在按日期时间字段过滤 Checkin
和 Guest
,即:
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 列表。我不是一口气搞定的。
我正在尝试遍历日期范围 (8/1/19-3/31/20) 并遍历每个日期并打印凌晨 4 点、凌晨 5 点和早上 6 点的计数。但是,我在获取所需日期和迭代时遇到了一些一般性问题。我不断收到各种 datetime
和 datetime.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 没有小时属性。我只是希望得到帮助,让这段代码发挥作用。
我正在按日期时间字段过滤 Checkin
和 Guest
,即:
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 列表。我不是一口气搞定的。