计算两个日期之间的星期几小时对 [英] Counting day-of-week-hour pairs between two dates
问题描述
考虑 24H
格式的星期几对以下列表:
Consider the following list of day-of-week-hour pairs in 24H
format:
{
'Mon': [9,23],
'Thu': [12, 13, 14],
'Tue': [11, 12, 14],
'Wed': [11, 12, 13, 14]
'Fri': [13],
'Sat': [],
'Sun': [],
}
和两个时间点,例如:
-
开始
datetime.datetime(2015, 7, 22, 17, 58, 54, 746784)
结束
End:
datetime.datetime(2015, 8, 30, 10, 22, 36, 363912)
说,我们需要知道上述两个数据时间(向上或向下舍入)中有多少个小时。
Say we need to know how many hours there are between these two datetimes (either rounding up or down) for each of the day-of-week-hour pairs specified above.
如何在Python中解决这个问题?我以一般的详细程度探索了 timedelta
和 relativedelta
,但我没有找到任何提供接近这个的东西。
How can I approach this problem in Python? I explored timedelta
and relativedelta
in a general level of detail but I didn't find anything that provides something close to this.
为简单起见,我们可以假设所有内容都是指相同的时区。
For simplicity, we can assume that everything refers to the same timezone.
也许一个更简单的问题是集中在一个单一的日间对,例如
Perhaps a simpler problem is to focus on a single day-hour pair, e.g. How many Wednesdays: 14
are there between two arbitrary datetimes?
推荐答案
几个星期三:14
可能是这样的:
from calendar import day_abbr
from datetime import datetime, timedelta
def solve(start, end, data):
days = list(day_abbr)
output = dict.fromkeys(days, 0)
while start <= end:
day = days[start.weekday()]
if start.hour in data[day]:
output[day] += 1
start = start + timedelta(minutes=60)
return output
data = {
'Mon': [9, 23],
'Thu': [12, 13, 14],
'Tue': [11, 12, 14],
'Wed': [11, 12, 13, 14],
'Fri': [13],
'Sat': [],
'Sun': [],
}
start = datetime(2015, 7, 22, 17, 58, 54, 746784)
end = datetime(2015, 8, 30, 10, 22, 36, 363912)
print solve(start, end, data)
# {'Wed': 20, 'Sun': 0, 'Fri': 6, 'Tue': 15, 'Mon': 10, 'Thu': 18, 'Sat': 0}
每小时计算一次:
from calendar import day_abbr
from collections import defaultdict
from datetime import datetime, timedelta
from pprint import pprint
def solve(start, end, data):
days = list(day_abbr)
output = defaultdict(lambda: defaultdict(int))
while start <= end:
day = days[start.weekday()]
if start.hour in data[day]:
output[day][start.hour] += 1
start = start + timedelta(minutes=60)
return {k: dict(v) for k, v in output.items()}
data = {
'Mon': [9, 23],
'Thu': [12, 13, 14],
'Tue': [11, 12, 14],
'Wed': [11, 12, 13, 14],
'Fri': [13],
'Sat': [],
'Sun': [],
}
start = datetime(2015, 7, 22, 17, 58, 54, 746784)
end = datetime(2015, 8, 30, 10, 22, 36, 363912)
pprint(solve(start, end, data))
# output
{'Fri': {13: 6},
'Mon': {9: 5, 23: 5},
'Thu': {12: 6, 13: 6, 14: 6},
'Tue': {11: 5, 12: 5, 14: 5},
'Wed': {11: 5, 12: 5, 13: 5, 14: 5}}
这篇关于计算两个日期之间的星期几小时对的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!