1.两个日期之间有多少个自然星期,以及每个自然星期的天数
背景:计算排产计划中的产能时,每个周期的产能是按照总的供应量展开到供应开始日期至供应结束日期之间的每个周期而得到的。具体的计算公式是:每个周期(1个自然星期算1个周期)的产能=每个自然星期的天数*日供应量。
关键点:求两个日期之间有多少个自然星期,以及每个自然星期的天数。涉及函数start_date.weekday()计算某个日期类型的值是星期几(返回值0,1,2,3,4,5,6分别代表星期一到星期日)
【自然周:从周一开始到周天结束】
start_date = pd.to_datetime('20240101')
end_date = pd.to_datetime('20240827')
def get_days_list(start_date, end_date):
# 计算两个日期之间的天数差
delta = (end_date - start_date).days
# 计算第一个自然周的天数
first_week_days = 7 - start_date.weekday()
if first_week_days == 7:
first_week_days = 0
# 计算最后一个自然周的天数
last_week_days = end_date.weekday() + 1
# 计算自然周的数量
num_weeks = (delta - first_week_days - last_week_days) // 7 + 3
# 计算每个自然周的天数
week_days = [first_week_days] + [7] * (num_weeks - 2) + [last_week_days]
return num_weeks, week_days
re = get_days_list(start_date, end_date)
print(re)
输出结果:
(36, [0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2])
2.计算日期所在的月份有几天
涉及函数: pd.to_datetime(str); calendar.monthrange(year, month)
import calendar
start_date = pd.to_datetime('20240101')
year = start_date.year
month = start_date.month
_, num_days = calendar.monthrange(year, month)
print(num_days)
输出结果:
31