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

如何在年份模糊时强制datetime解析为过去的日期?

问题:强制将DD/MM/YY格式的历史日期解析为过去日期

我有一批DD/MM/YY格式的历史日期,均属于过去,但使用datetime.datetime.strptime解析时存在歧义:

  • 输入'01/06/69'会被正确解析为1969年:
>>> datetime.datetime.strptime('01/06/69','%d/%m/%y')
datetime.datetime(1969, 6, 1, 0, 0)
  • 但输入'01/06/68'会被解析为2068年(未来日期):
>>> datetime.datetime.strptime('01/06/68','%d/%m/%y')
datetime.datetime(2068, 6, 1, 0, 0)

请问datetime模块是否有选项可强制将这类日期解析为过去的日期?


解决方法

Python的datetime模块本身没有直接参数可以自定义%y格式的年份映射规则,但可以通过手动调整实现需求:

方法1:解析后修正未来日期

先按常规方式解析日期,再判断结果是否在当前时间之后,若是则将年份减去100:

import datetime

def parse_historical_date(date_str):
    parsed = datetime.datetime.strptime(date_str, '%d/%m/%y')
    now = datetime.datetime.now()
    if parsed > now:
        parsed = parsed.replace(year=parsed.year - 100)
    return parsed

# 测试
print(parse_historical_date('01/06/68'))  # 输出:1968-06-01 00:00:00
print(parse_historical_date('01/06/69'))  # 输出:1969-06-01 00:00:00

方法2:预处理年份字符串

直接提取日期中的两位年份,根据规则转换为四位年份后再拼接解析(适合明确所有日期范围的场景):

import datetime

def parse_historical_date(date_str):
    day, month, year_two = date_str.split('/')
    year = int(year_two)
    # 强制将两位年份映射到1900-1999(若确定所有日期都是2000年前的历史记录)
    year += 1900
    full_date = f"{day}/{month}/{year}"
    return datetime.datetime.strptime(full_date, '%d/%m/%Y')

# 测试
print(parse_historical_date('01/06/68'))  # 输出:1968-06-01 00:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:10:26