计算两个日期之间的星期几小时对 [英] Counting day-of-week-hour pairs between two dates

查看:151
本文介绍了计算两个日期之间的星期几小时对的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑 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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆