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

Python如何实现日期相减?解决datetime.date与字符串相减报错问题

问题原因

报错是因为字典中存储的生日是字符串类型,无法直接和datetime.date类型的当前日期做减法运算,必须先将字符串格式的生日转换为datetime.date类型后再计算。

解决方法

使用datetime.datetime.strptime()方法按「日-月-年」的格式解析字符串生日,转换为日期对象后再做年龄计算,修改后的完整可运行代码如下:

import datetime
import math

ministers = [{1: "Alexander", 2: "De Croo", 3: "3-11-1975", 4: "Vilvoorde", 5: "Open Vld"},
             {1: "Sophie", 2: "Wilmès", 3: "15-01-1975", 4: "Elsene", 5: "MR"},
             {1: "Frank", 2: "Vandenbroucke", 3: "21-10-1955", 4: "Leuven", 5: "sp.a"},
             {1: "Petra", 2: "De Sutter", 3: "10-6-1963", 4: "Oudenaarde", 5: "groen"},
             {1: "Sammy", 2: "Mahdi", 3: "21-9-1988", 4: "Elsene", 5: "CD&V"},
             {1: "Zakia", 2: "Khattabi", 3: "15-1-1976", 4: "Sint-Joost-ten-Node", 5: "Ecolo"},
             {1: "Ludivine", 2: "Dedonder", 3: "17-3-1977", 4: "Doornik", 5: "PS"},
             {1: "Karine", 2: "Lalieux", 3: "4-5-1964", 4: "Anderlecht", 5: "PS"},]

for dictionary in ministers:
    # 转换字符串生日为date类型
    birth_date = datetime.datetime.strptime(dictionary[3], "%d-%m-%Y").date()
    age = math.floor((datetime.date.today() - birth_date).days / 365.25)
    if age < 50:
        print(dictionary[1], dictionary[2], age)

说明

  • strptime的第二个参数%d-%m-%Y对应你日期的格式:%d匹配两位/一位日期,%m匹配两位/一位月份,%Y匹配四位年份
  • 转换后调用.date()是为了和当前日期datetime.date.today()的类型保持一致,避免后续计算出现类型不兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:04