这个约会过时了吗?python



我正在编写一个函数来标记和标记报告中的过期日期(早于6个月(。

def isStale(lineItemDate):
if delta > 180:
return " Stale"
else:
return ""
# where delta subtracts my lineItemDate from today in days

问题是,我的原始数据(lineItemDate(是一个字符串:"Sep 52020",所以我需要将其转换为"datey",并且与timedelta(days=180(中的任何数据相当,后者似乎是"2019-09-08 11:33:54.978144"。

我尝试的每一种技术最终都会为每个日期提供一系列转换行来进行比较。我正试着把它精简成几行。

不确定为什么这不会增加个位数的天数:

print(datetime.strptime("Sep 5, 2019", '%b %-d, %Y')))
ValueError("'%s' is a bad directive in format '%s'" % 
ValueError: '-' is a bad directive in format '%b %-d, %Y'

最终,有没有一种优雅的方法来比较这两个日期元素,这样我就可以标记旧的日期元素?

您不需要-;虽然strftime使用%d来输出零填充日,但strptime将解析带或不带前导零的个位数日。

>>> from datetime import datetime
>>> datetime.strptime("Sep 5, 2019", "%b %d, %Y")
datetime.datetime(2019, 9, 5, 0, 0)
>>> datetime.strptime("Sep 05, 2019", "%b %d, %Y")
datetime.datetime(2019, 9, 5, 0, 0)

这是有文档记录的,但实际上这是页面上最后提到的内容。:(

  1. 与strptime((方法一起使用时,前导零对于格式%d、%m、%H、%I、%m、%S、%J、%U、%W和%V是可选的。格式%y不需要前导零

我的完整解决方案,面向子孙后代:

from datetime import datetime
def isStale(servdate):
return (datetime.now() - datetime.strptime(servdate, '%b %d, %Y')).days > 180

print(isStale("Sep 15, 2019"))
print(isStale("Sep 5, 2019"))

False
True

最新更新