如何获取日期格式的用户输入并实现日期差值计算?
问题分析与解决方案
核心问题
- 输入函数误用:你用
get_int()获取DD/MM/YYYY格式的日期字符串,该函数仅支持整数输入,直接触发ValueError。 - 日期类型混乱:将当前日期转成字符串后无法与日期对象进行比较/运算;且直接用
datetime(due_date)转换输入字符串是错误的,datetime构造函数不接受这种格式的字符串参数。
修正后的代码
from datetime import datetime # 获取当前日期的date对象(仅保留日期部分,去除时间) current_date = datetime.today().date() # 格式化后展示当前日期 show_str(f"Today's date is:\n-> {current_date.strftime('%d/%m/%Y')}\n") biller_name = get_str("What is the billers name?\n-> ") # 用get_str获取日期字符串输入 due_date_str = get_str("When is your bill due?\n(Enter date as \"DD/MM/YYYY\")\n-> ") try: # 按指定格式将输入字符串解析为date对象 due_date = datetime.strptime(due_date_str, '%d/%m/%Y').date() # 对比日期并判断账单状态 if due_date < current_date: days_overdue = (current_date - due_date).days show_str(f"Bill from {biller_name} is {days_overdue} days overdue!") elif due_date == current_date: show_str(f"Bill from {biller_name} is due today!") else: days_until_due = (due_date - current_date).days show_str(f"Bill from {biller_name} is due in {days_until_due} days.") except ValueError: # 处理日期格式错误的情况 show_str("Invalid date format! Please enter the date in DD/MM/YYYY format.")
关键说明
- 保留日期对象:始终使用
datetime.date类型处理日期,避免转成字符串,这样才能直接进行比较和差值计算。 - 正确转换输入:用
datetime.strptime()将用户输入的字符串按指定格式解析为日期对象,这是字符串转日期的标准方法。 - 错误捕获:添加
try-except块捕获格式错误,提示用户输入符合要求的日期。
内容的提问来源于stack exchange,提问作者TechANam
相关产品推荐
相关产品推荐

