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

Python如何动态处理日、周、月、季度等不同格式的DateTime字符串

日期格式转换方案

Python标准库没有能直接匹配你当前业务自定义转换规则的内置函数,dateutil的通用解析逻辑也没法直接适配周、月、季度取固定起始日期的业务需求,不过也不需要手动维护全量的日期格式映射表,只要按四类格式的特征做分支判断处理即可,四类格式的区分特征非常明显,处理逻辑如下:

  • 季度格式:特征为包含Q字符,先提取年份和季度数字,按规则映射即可:Q1对应[年份]-01-01,Q2对应[年份]-04-01,Q3对应[年份]-07-01,Q4对应[年份]-10-01
  • 周格式:特征为带有Week of前缀,提取前缀后的月日字符串解析后直接输出即可,无年份的场景按业务规则补全对应年份
  • 月格式:特征为包含表示年份的撇号后缀(’),解析后取当月1号作为输出值
  • 日格式:排除以上三类特征后即可归为日格式,直接解析补全年份输出即可

你可以参考以下简化实现代码:

from datetime import datetime
import re

def custom_date_parser(date_str: str, default_year: int = datetime.now().year) -> str:
    # 处理季度格式
    if 'Q' in date_str:
        year, q = re.match(r'(\d{4}) Q(\d)', date_str).groups()
        quarter_start_month = (int(q) - 1) * 3 + 1
        return f"{year}-{quarter_start_month:02d}-01"
    # 处理周格式
    elif date_str.startswith('Week of '):
        date_part = date_str.replace('Week of ', '')
        dt = datetime.strptime(f"{date_part} {default_year}", "%b %d %Y")
        return dt.strftime("%Y-%m-%d")
    # 处理月格式
    elif '’' in date_str:
        dt = datetime.strptime(date_str.replace('’', ''), "%b %y")
        return dt.strftime("%Y-%m-01")
    # 处理日格式
    else:
        dt = datetime.strptime(f"{date_str} {default_year}", "%b %d %Y")
        return dt.strftime("%Y-%m-%d")

# 测试示例
print(custom_date_parser("Oct 24", 2021)) # 输出 2021-10-24
print(custom_date_parser("Week of Oct 18", 2021)) # 输出 2021-10-18
print(custom_date_parser("Oct ’21")) # 输出 2021-10-01
print(custom_date_parser("2021 Q3")) # 输出 2021-07-01

如果后续新增其他格式,只要补充对应的特征判断分支和处理逻辑即可,不需要维护全量的格式映射表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:05