Эта дата устарела? python - PullRequest
0 голосов
/ 06 марта 2020

Я пишу функцию для пометки и пометки устаревших дат (старше 6 месяцев) в отчете.

т.е.

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

Проблема в том, что мои необработанные данные (lineItemDate) в виде строки: «5 сентября 2020 года», поэтому мне нужно преобразовать это во что-то «дата» и сравнимо с тем, что получается из timedelta (days = 180), которая выглядит как «2019-09-08 11 : 33: 54.978144 ".

Каждый метод, который я пробую, заканчивается серией конверсий для каждой сравниваемой даты. Я пытаюсь сократить его до нескольких строк.

Не уверен, почему это не поднимет один ди git дней:

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'

В конечном счете, есть элегантный способ сравнения этих двух элементов даты, чтобы я мог пометить старые?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Мое полное решение для потомков:

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
1 голос
/ 06 марта 2020

Вам не нужно -; хотя strftime использует %d для вывода дня с добавлением нуля, strptime будет анализировать один-ди git день с или без начального нуля.

>>> 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)

Это задокументировано , но это буквально последнее, что упомянуто на странице. :)

При использовании с методом strptime () начальный ноль необязателен для форматов% d,% m,% H,% I,% M,% S,% J,% U,% W и% V. Формат% y требует начального нуля.
...