python统计项目计划中2个日期之间的工作天数
在写项目计划的时候,需要统计出工作日的天数,自己不想数,我用python 进行了统计
详细代码:
import datetime
def count_weekdays(start_date, end_date, holidays):
total_weekdays = 0
current_date = start_date
while current_date <= end_date:
# 只计算工作日且不是假期
if current_date.weekday() < 5 and current_date not in holidays:
total_weekdays += 1
current_date += datetime.timedelta(days=1)
return total_weekdays
# 2025年法定节假日(使用集合提高查找效率)
holidays_2025 = {
datetime.datetime(2024, 12, 30), datetime.datetime(2024, 12, 31), datetime.datetime(2025, 1, 1),
datetime.datetime(2025, 2, 18), datetime.datetime(2025, 2, 19), datetime.datetime(2025, 2, 20),
datetime.datetime(2025, 2, 21), datetime.datetime(2025, 2, 22), datetime.datetime(2025, 2, 23),
datetime.datetime(2025, 2, 24),
datetime.datetime(2025, 4, 4), datetime.datetime(2025, 4, 5), datetime.datetime(2025, 4, 6),
datetime.datetime(2025, 5, 1), datetime.datetime(2025, 5, 2), datetime.datetime(2025, 5, 3),
datetime.datetime(2025, 5, 4), datetime.datetime(2025, 5, 5),
datetime.datetime(2025, 6, 19), datetime.datetime(2025, 6, 20), datetime.datetime(2025, 6, 21),
datetime.datetime(2025, 9, 29), datetime.datetime(2025, 9, 30),
datetime.datetime(2025, 10, 1), datetime.datetime(2025, 10, 2), datetime.datetime(2025, 10, 3),
datetime.datetime(2025, 10, 4), datetime.datetime(2025, 10, 5), datetime.datetime(2025, 10, 6),
datetime.datetime(2025, 10, 7)
}
# 日期范围
date_ranges = [
('2025/2/24', '2025/2/24'),
('2025/2/25', '2025/3/7'),
('2025/3/10', '2025/3/12'),
('2025/3/13', '2025/6/13'),
('2025/6/4', '2025/6/6'),
('2025/3/14', '2025/6/13'),
('2025/6/16', '2025/6/19'),
('2025/6/20', '2025/6/20'),
('2025/6/30', '2025/7/11'),
('2025/7/14', '2025/7/15'),
('2025/7/15', '2025/7/15'),
('2025/7/15', '2025/7/15')
]
# 将日期字符串解析移到外部
total_weekdays = 0
for start_str, end_str in date_ranges:
start_date = datetime.datetime.strptime(start_str, '%Y/%m/%d')
end_date = datetime.datetime.strptime(end_str, '%Y/%m/%d')
# 直接计算工作日天数
weekdays = count_weekdays(start_date, end_date, holidays_2025)
# 处理特殊情况:直接指定特定日期范围的工作日
if start_str == '2025/2/25' and end_str == '2025/3/7':
weekdays = 9
elif start_str == '2025/2/24' and end_str == '2025/2/24':
weekdays = 1
total_weekdays += weekdays
print(f"从 {start_str} 到 {end_str} 的工作日天数为: {weekdays}")
print(f"所有时间段的工作日总天数为: {total_weekdays}")