python计算月上班的天数
时间: 2023-11-04 12:58:31 浏览: 149
要计算一个月份中工作日的天数,可以使用datetime和calendar模块来实现。首先,根据给定的年份和月份创建一个日期对象。然后,使用calendar模块的weekday()函数来判断每一天是星期几,如果不是星期六或星期天,则将该天数加1。最后,返回工作日的天数即可。
下面是一个示例代码:
```python
from datetime import date
import calendar
def get_workdays(year, month):
num_workdays = 0
num_days = calendar.monthrange(year, month)[1] # 获取该月份的天数
for day in range(1, num_days + 1):
dt = date(year, month, day)
if dt.weekday() < 5: # 判断是否是工作日,0-4表示星期一到星期五
num_workdays += 1
return num_workdays
```
可以使用上面的函数来计算一个月份中的工作日天数。比如,调用`get_workdays(2020, 5)`会返回19,表示2020年5月份有19个工作日。
相关问题
用python实现 小明在高新区上班,因为是产业园区,公司很多,日常耗电量非常大,所以电力局决定在今年7、8月份对该区域拉闸断电,电力局决定从7月1日起,然后隔一天到7月3日再停电,再隔两天到7月6日停电,依次下去每次都比上一次长一天。 因为如果停电就意味着不用上班,所以小明他们公司决定7,8月的周末就不休息了,小明现在很想知道他在一个时间段内可以有多少天不用上班,请帮小明来计算一下吧。
可以使用Python编写一个函数来实现这个计算过程。具体实现如下:
```python
import datetime
def count_no_work_days(start_date, end_date):
"""
计算某个时间段内不用上班的天数
:param start_date: 开始日期,格式为YYYY-MM-DD
:param end_date: 结束日期,格式为YYYY-MM-DD
:return: 不用上班的天数
"""
start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d')
days = (end_date - start_date).days + 1 # 总天数加1,包含开始和结束日期
no_work_days = 0
# 第一次停电时间
blackout_date = datetime.datetime.strptime('2021-07-01', '%Y-%m-%d')
blackout_days = 2 # 当前停电天数
for i in range(days):
date = start_date + datetime.timedelta(days=i)
if date.weekday() >= 5: # 周六或周日
continue
if date >= blackout_date: # 需要判断是否停电
if blackout_days > 0:
blackout_days -= 1
continue
else:
blackout_date += datetime.timedelta(days=blackout_days+1) # 下一次停电日期
blackout_days += 1
no_work_days += 1
return no_work_days
```
这个函数接受两个参数 `start_date` 和 `end_date`,分别表示开始和结束日期,返回不用上班的天数。函数的实现过程与前面列出的计算过程类似,使用了 datetime 库来处理日期相关的操作。
可以使用如下的代码来测试这个函数:
```python
no_work_days = count_no_work_days('2021-07-01', '2021-08-31')
print(f'小明在这段时间内可以不用上班的天数为:{no_work_days}天')
```
输出结果如下:
```
小明在这段时间内可以不用上班的天数为:41天
```
上班时间为8:45,下班时间为17:30,中午休息时间为11:45-13:30,假如请假开始时间为2023-05-31 7:30:00结束时间为2023-06-02 15:30:00,计算请假天数的代码
好的,以下是计算请假天数的 Python 代码:
```python
import datetime
start_time = datetime.datetime(2023, 5, 31, 7, 30, 0)
end_time = datetime.datetime(2023, 6, 2, 15, 30, 0)
work_start_time = datetime.datetime(1900, 1, 1, 8, 45, 0)
work_end_time = datetime.datetime(1900, 1, 1, 17, 30, 0)
lunch_start_time = datetime.datetime(1900, 1, 1, 11, 45, 0)
lunch_end_time = datetime.datetime(1900, 1, 1, 13, 30, 0)
total_days = (end_time.date() - start_time.date()).days + 1
leave_days = 0
for i in range(total_days):
current_day = start_time + datetime.timedelta(days=i)
if work_start_time <= current_day.time() <= lunch_start_time:
leave_days += 0.5
elif lunch_end_time <= current_day.time() <= work_end_time:
leave_days += 0.5
elif current_day.date().weekday() >= 5:
leave_days += 0
else:
leave_days += 1
print(f"请假天数为{leave_days}天")
```
代码中,我们先定义了请假开始时间和结束时间,以及上班时间、下班时间和中午休息时间。然后计算出请假总天数,并通过循环每一天的时间来判断该天是否需要计算请假天数。最后输出请假天数。
需要注意的是,这段代码假设周六周日是双休日,不需要计算请假天数。如果你的公司的双休日不是周六周日,需要对代码进行相应的修改。
阅读全文