【发布时间】: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
我想计算两个日期之间的差异,但想从中排除周末。以下是日期格式:
CreateDate - 2017-08-29 10:47:00
ResolveDate - 2017-09-23 16:56:00
【问题讨论】:
标签: python python-2.7 datetime
您可以使用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
【讨论】:
使用 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)))
【讨论】:
运行while 循环,不断将+1 天的timedelta 添加到create_date。在单独的柜台跟踪工作日与周末。
【讨论】:
使用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
【讨论】: