python - 从字典中查找最接近今天日期的日期
问题描述
我想在日期字典中找到今天日期和下一个日期之间的天数。首先,我试图在字典中找到最接近当前日期的日期。
current_date = datetime.today()
date_schedule = {
"1": "2019-7-29",
"2": "2019-8-27",
"3": "2019-9-27",
"4": "2019-10-28",
"5": "2019-11-27",
"6": "2019-12-27",
"7": "2020-1-27",
"8": "2020-2-27",
"9": "2020-3-27",
"10": "2020-4-27",
"11": "2020-5-27",
"12": "2020-6-29",
}
def days_till_payment(date_schedule, current_date):
days_left = min(date_schedule, key=lambda x: abs(x - current_date))
return days_left
但是,当我尝试运行它时,出现以下错误:
TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'
我真的很感激有人请向我解释我是如何解决这个问题的,并从字典中找出当前日期和下一个最接近的日期之间的天数。
编辑:如果它返回 NEXT UPCOMING 日期,而不仅仅是最近的日期(包括已经过去的日期),这个函数会更好。我想输出下一个即将到来的日期以及从今天开始到这个日期还有多少天。
解决方案
您需要将转换str
为datetime
对象。然后,
1.从 date_schedules 中找到 mindate >= current date
2.查找mindate - 当前日期之间的天数差异
from datetime import datetime
date_schedule = {
"1": "2019-7-29",
"2": "2019-8-27",
"3": "2019-9-27",
"4": "2019-10-28",
"5": "2019-11-27",
"6": "2019-12-27",
"7": "2020-1-27",
"8": "2020-2-27",
"9": "2020-3-27",
"10": "2020-4-27",
"11": "2020-5-27",
"12": "2020-6-29",
}
def keyfunc(date):
return (date - datetime.today()).days
def days_till_payment(date_schedule, today):
dates = [datetime.strptime(v, '%Y-%m-%d') for v in date_schedule.values()]
search_dates = [date for date in dates if date >= today]
date = min(search_dates, key=keyfunc)
return (date - today).days, date.strftime('%Y-%m-%d')
>>> days, date = days_till_payment(date_schedule, datetime.today())
>>> days
19
>>> date
'2019-10-28'
推荐阅读
- php - 在 PHP 中访问 React 承诺之外的变量
- r - RLM 拟合模型返回“`[.data.frame`(mf, xvars) 中的错误:选择了未定义的列”
- python - 在message.content discord.py中的“if x”中放入多个关键字
- python - 交换字典中的值和键
- javascript - 使用 vue3-pdf 的 PDF 结构无效
- flutter - 有没有办法缩短 Flutter 中的 Riverpod 依赖注入调用?
- ruby-on-rails - Rails 6 中 GraphQL 错误的本地化
- swiftui - SwiftUI Picker 固定标签
- javascript - Javascript 修改指定 url 上 XHR 请求的响应文本
- node.js - AWS Lambda 函数无法连接(超时)到 FTP 服务器