You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将月周次+星期数值转换为对应日期,支持bash或python实现

实现方案(Python版)

字段含义说明

先统一你给出的配置项规则:

  • hour_start: 13:维护开始时间为当日13点
  • minute_duration: 120:维护总时长120分钟(即2小时)
  • week: 3:每月第3周执行维护
  • weekday: 2:每周的第2天(下方代码默认适配周1为1、周2为2的规则,如果你的规则是周日为周1,修改代码里的偏移量即可)

完整可运行代码

import datetime
import calendar

def get_monthly_maintenance_time(target_year: int, target_month: int, config: dict) -> tuple[datetime.datetime, datetime.datetime]:
    # 适配周数规则:如果你的weekday是周日为1,把这里的偏移量改成 config['weekday'] % 7 即可
    weekday_offset = config['weekday'] - 1  # 转成Python datetime内置规则:周一=0、周二=1...周日=6

    # 获取目标月的所有日期排布
    month_calendar = calendar.monthcalendar(target_year, target_month)
    
    # 匹配第N周的目标星期日期
    valid_week_count = 0
    target_day = 0
    for week in month_calendar:
        if week[weekday_offset] != 0:  # 排除跨月显示的上月日期
            valid_week_count += 1
            if valid_week_count == config['week']:
                target_day = week[weekday_offset]
                break
    
    if target_day == 0:
        raise ValueError(f"{target_year}年{target_month}月不存在第{config['week']}个周{config['weekday']}")
    
    # 构造开始、结束时间
    start_time = datetime.datetime(
        year=target_year,
        month=target_month,
        day=target_day,
        hour=config['hour_start'],
        minute=0
    )
    end_time = start_time + datetime.timedelta(minutes=config['minute_duration'])
    return start_time, end_time

# 你的维护配置
maintenance_config = {
    "hour_start": 13,
    "minute_duration": 120,
    "week": 3,
    "weekday": 2
}

if __name__ == "__main__":
    # 固定指定年月运行
    year, month = 2024, 10
    # 要自动取当前月运行的话,替换上面一行为下面两行即可
    # now = datetime.datetime.now()
    # year, month = now.year, now.month
    
    start, end = get_monthly_maintenance_time(year, month, maintenance_config)
    print(f"维护开始时间:{start.strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"维护结束时间:{end.strftime('%Y-%m-%d %H:%M:%S')}")

批量处理导出的表格数据

如果你需要批量处理从数据库导出的Excel/CSV格式数据,可以用pandas库完成批量转换,示例代码片段:

import pandas as pd

# 读取导出的文件
df = pd.read_excel("导出的维护配置表.xlsx")

# 新增两列存储计算后的时间
df['维护开始时间'] = df.apply(
    lambda row: get_monthly_maintenance_time(row['year'], row['month'], row.to_dict())[0].strftime('%Y-%m-%d %H:%M:%S'), 
    axis=1
)
df['维护结束时间'] = df.apply(
    lambda row: get_monthly_maintenance_time(row['year'], row['month'], row.to_dict())[1].strftime('%Y-%m-%d %H:%M:%S'), 
    axis=1
)

# 保存结果
df.to_excel("维护时间计算结果.xlsx", index=False)

内容的提问来源于stack exchange,提问作者shkabaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:18:02