简体   繁体   English

Python - 排除两个日期之间的周末

[英]Python - Exclude weekends between two Dates

I want to calculate the difference between the two dates but want to exclude the weekends from it .我想计算两个日期之间的差异,但想从中排除周末。 Below is the format of dates :以下是日期的格式:

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

You can use numpy.busday_count:您可以使用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())}")

Output:输出:

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

One more python way using isoweekday():使用 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)))

Run a while loop that keeps adding a timedelta of +1 day to create_date .运行一个while循环,不断向create_date添加 +1 天的时间timedelta Keep track of weekday vs. weekend in a separate counter.在单独的柜台跟踪工作日与周末。

Same idea with weekday() but as a one-line function:weekday()相同的想法,但作为单行函数:

from datetime import datetime, timedelta


def get_business_days(start_date, end_date):
    return sum([
        (start_date + timedelta(days=i)).weekday() not in (5, 6)
        for i in range((end_date - start_date).days + 1)
    ])


create_date = "2017-08-29 10:47:00"
resolve_date = "2017-09-23 16:56:00"

s = datetime.strptime(create_date, '%Y-%m-%d %H:%M:%S')
e = datetime.strptime(resolve_date, '%Y-%m-%d %H:%M:%S')

print(get_business_days(s, e))

With datetime module:使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM