【问题标题】:Python - Exclude weekends between two DatesPython - 排除两个日期之间的周末
【发布时间】:2017-09-24 05:05:31
【问题描述】:

我想计算两个日期之间的差异,但想从中排除周末。以下是日期格式:

CreateDate  - 2017-08-29 10:47:00
ResolveDate - 2017-09-23 16:56:00

【问题讨论】:

    标签: python python-2.7 datetime


    【解决方案1】:

    您可以使用numpy.busday_count:

    from datetime import datetime
    import numpy as np
    
    create_date = "2017-08-29 10:47:00"
    resolve_date = "2017-09-23 16:56:00"
    
    create_datetime = datetime.strptime(create_date, '%Y-%m-%d %H:%M:%S')
    resolve_datetime = datetime.strptime(resolve_date, '%Y-%m-%d %H:%M:%S')
    
    print(f"The difference in days is: {(resolve_datetime - create_datetime).days}")
    print(f"The difference in business days is: {np.busday_count(create_datetime.date(), resolve_datetime.date())}")
    

    输出:

    The difference in days is: 25
    The difference in business days is: 19
    

    【讨论】:

    • 您好,感谢您的解决方案,但我们如何才能获得确切的小数值? (也包括小时数?)
    【解决方案2】:

    使用 isoweekday() 的另一种 python 方式:

    import datetime, pprint
    
    # isoweekday: Monday is 1 and Sunday is 7
    start_date = datetime.date(2017, 10, 1)
    end_date = datetime.date(2017, 12, 31)
    days = end_date - start_date
    valid_date_list = {(start_date + datetime.timedelta(days=x)).strftime('%d-%b-%Y')
                            for x in range(days.days+1)
                            if (start_date + datetime.timedelta(days=x)).isoweekday() <= 5
                           }
    print("Business Days = {}".format(len(valid_date_list)))
    

    【讨论】:

      【解决方案3】:

      运行while 循环,不断将+1 天的timedelta 添加到create_date。在单独的柜台跟踪工作日与周末。

      【讨论】:

        【解决方案4】:

        使用datetime 模块:

        import datetime
        
        d1 = datetime.datetime.strptime('2017-08-29 10:47:00', '%Y-%m-%d %H:%M:%S')
        d2 = datetime.datetime.strptime('2017-09-23 16:56:00', '%Y-%m-%d %H:%M:%S')
        delta = (d2 - d1).days
        diff_weekdays = delta - (delta // 7) * 2
        
        print(diff_weekdays)    # 19
        

        【讨论】:

        • 我怎样才能得到准确的小时差异(不包括周末和节假日)
        • 此解决方案无法按预期工作,因为它假定开始日期是在一周的开始。如果开始日期是例如这个星期五,结束日期是下星期一,结果将是 3,因为计算周数的方式 (3 // 7 = 0)。
        猜你喜欢
        • 2019-01-04
        • 2014-01-14
        • 1970-01-01
        • 2011-04-17
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多