дата питона предыдущего месяца - PullRequest
100 голосов
/ 15 марта 2012

Я пытаюсь получить дату предыдущего месяца с помощью Python. Вот что я пробовал:

str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )

Однако этот способ плох по двум причинам: во-первых, он возвращает 20122 за февраль 2012 года (вместо 201202), а во-вторых, он возвращает 0 вместо 12 в январе.

Я решил эту проблему в bash с

echo $(date -d"3 month ago" "+%G%m%d")

Я думаю, что если в bash есть встроенный способ для этой цели, то python, гораздо более оснащенный, должен обеспечить что-то лучшее, чем принуждение к написанию собственного сценария для достижения этой цели. Конечно, я мог бы сделать что-то вроде:

if int(time.strftime('%m')) == 1:
    return '12'
else:
    if int(time.strftime('%m')) < 10:
        return '0'+str(time.strftime('%m')-1)
    else:
        return str(time.strftime('%m') -1)

Я не проверял этот код, и все равно не хочу его использовать (если я не могу найти другой способ: /)

Спасибо за вашу помощь!

Ответы [ 11 ]

0 голосов
/ 16 июля 2015

Построение комментария @ J.F. Себастьян, ты можешь связать функцию replace(), чтобы вернуться назад на один «месяц». Поскольку месяц не является постоянным периодом времени, это решение пытается вернуться к той же дате предыдущего месяца, что, конечно, не работает для всех месяцев. В таком случае этот алгоритм по умолчанию использует последний день предыдущего месяца.

from datetime import datetime, timedelta

d = datetime(2012, 3, 31) # A problem date as an example

# last day of last month
one_month_ago = (d.replace(day=1) - timedelta(days=1))
try:
    # try to go back to same day last month
    one_month_ago = one_month_ago.replace(day=d.day)
except ValueError:
    pass
print("one_month_ago: {0}".format(one_month_ago))

Выход:

one_month_ago: 2012-02-29 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...