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

如何通过星期、月份和年份在Python中获取实际日期

在Python中用星期、月份、年份生成实际日期

首先明确两个关键前提:

  1. 你的星期数据格式:是星期名称(如"Monday"/"周一")还是数字标识(注意:datetime模块中weekday()返回0=周一、6=周日;isoweekday()返回1=周一、7=周日,需对应你的数据标准)
  2. 你要的是该年月中第一个匹配该星期的日期,还是所有符合条件的日期?

场景1:处理单条数据(用datetime模块)

方法1:获取当月所有匹配日期

适用于需要找出该年月内所有对应星期的日期:

import datetime

year = 2024
month = 5
target_weekday = "Monday"  # 替换为你的星期数据,也可以直接用数字

# 星期名称转数字(根据你的数据格式调整映射)
weekday_map = {
    "Monday": 0,
    "Tuesday": 1,
    "Wednesday": 2,
    "Thursday": 3,
    "Friday": 4,
    "Saturday": 5,
    "Sunday": 6
}
target_num = weekday_map.get(target_weekday, target_weekday)

# 获取当月第一天和最后一天
first_day = datetime.date(year, month, 1)
last_day = datetime.date(year, month+1, 1) - datetime.timedelta(days=1) if month !=12 else datetime.date(year+1,1,1)-datetime.timedelta(days=1)

# 遍历匹配所有目标日期
matched_dates = []
current_day = first_day
while current_day <= last_day:
    if current_day.weekday() == target_num:
        matched_dates.append(current_day)
    current_day += datetime.timedelta(days=1)

print(f"{year}年{month}月的所有{target_weekday}:{matched_dates}")

方法2:快速获取第一个匹配日期

无需遍历,直接计算偏移量得到当月第一个目标星期的日期:

import datetime

year = 2024
month = 5
target_weekday = 0  # 对应周一(datetime.weekday()标准)

first_day = datetime.date(year, month, 1)
# 计算需要偏移的天数
offset = (target_weekday - first_day.weekday()) % 7
first_matched_date = first_day + datetime.timedelta(days=offset)

print(f"{year}年{month}月第一个周一:{first_matched_date}")

场景2:处理批量表格数据(用pandas)

如果你的数据是DataFrame格式的三列(year/month/weekday),可以批量生成日期:

import pandas as pd
import datetime

# 示例数据
df = pd.DataFrame({
    "year": [2024, 2024],
    "month": [5, 6],
    "weekday": ["Monday", "Friday"]
})

# 映射星期名称到数字
weekday_map = {"Monday":0, "Tuesday":1, "Wednesday":2, "Thursday":3, "Friday":4, "Saturday":5, "Sunday":6}
df["weekday_num"] = df["weekday"].map(weekday_map)

# 定义函数计算当月第一个匹配日期
def get_first_matched(row):
    first_day = datetime.date(row["year"], row["month"], 1)
    offset = (row["weekday_num"] - first_day.weekday()) % 7
    return first_day + datetime.timedelta(days=offset)

# 批量生成日期列
df["first_matched_date"] = df.apply(get_first_matched, axis=1)
print(df)

注意:如果你的星期数字遵循ISO标准(1=周一、7=周日),只需把代码中的weekday()替换为isoweekday(),并调整映射表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:10:19