You need to enable JavaScript to run this app. Python strptime忽略%A格式符 如何正确解析星期生成datetime对象
优惠活动
大模型
产品
解决方案
定价
更多

Python strptime忽略%A格式符 如何正确解析星期生成datetime对象

问题根因
  • strptime 中的 %A/%a 仅用于匹配输入字符串中的星期文本,不会作为独立字段写入 datetime 对象
  • datetime 的星期是完全由年月日时分秒派生计算的属性,不是独立存储的字段
  • 解析时缺失的年月日会默认填充为 1900-01-01,该日期恰好是星期一,因此无论输入的是 Monday 还是 Tuesday,解析结果都为周一,看起来就像 %A 被忽略了
解决方法(纯标准库实现)

思路:先拆分输入的星期和时间,单独解析时间,再通过日期偏移调整基准日期,让最终datetime的星期和输入匹配。

完整实现代码:

import datetime

# 星期全称映射到datetime.weekday()返回值(周一为0,周日为6)
WEEKDAY_MAP = {
    "Monday": 0,
    "Tuesday": 1,
    "Wednesday": 2,
    "Thursday": 3,
    "Friday": 4,
    "Saturday": 5,
    "Sunday": 6
}

def parse_week_time(input_str: str) -> datetime.datetime:
    # 拆分输入为星期、时间两部分
    week_part, time_part = input_str.split(maxsplit=1)
    # 大小写兼容处理
    week_part = week_part.title()
    # 解析时间部分,拿到默认基准日期的时分信息
    base_dt = datetime.datetime.strptime(time_part, "%I:%M%p")
    # 计算需要偏移的天数,让最终星期匹配输入
    target_weekday = WEEKDAY_MAP[week_part]
    delta = target_weekday - base_dt.weekday()
    return base_dt + datetime.timedelta(days=delta)
验证效果
# 测试输入
a = "Monday 11:30am"
b = "tuesday 11:30pm" # 测试小写输入
dt_a = parse_week_time(a)
dt_b = parse_week_time(b)

print(dt_a) # 输出 1900-01-01 11:30:00,weekday()为0(周一)
print(dt_b) # 输出 1900-01-02 23:30:00,weekday()为1(周二)

最终生成的datetime的星期完全和输入一致,年月日不影响使用,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 02:15:03