Я пытаюсь получить дату предыдущего месяца с помощью 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)
Я не тестировал этот код и все равно не хочу его использовать (если только я не смогу найти другой способ: /)
Спасибо за вашу помощь!
Ответы:
Классы datetime и datetime.timedelta - ваш друг.
Как это:
201202
печатается.источник
.replace()
метод:datetime.utcnow().replace(day=1) - timedelta(days=1)
.replace()
функцию. Сделайте это один раз, чтобы получить последний месяц, а затем повторите, чтобы получить желаемый день. Сначала:d = date.today()
затемone_month_ago = (d.replace(day=1) - timedelta(days=1)).replace(day=d.day)
calendar
и используяcalendar.mdays[d.month-1]
еще больше уродливости вmin()
функции во второмreplace
, но это кажется непитоническим и не учитывает угловые случаи. Я обновил свой ответ ниже, используяtry - except
учетные записи для всех случаев, хотя я ненавижу использование исключений как части алгоритма.Вам следует использовать dateutil . При этом вы можете использовать relativedelta, это улучшенная версия timedelta.
источник
Или:
источник
Основываясь на ответе bgporter .
источник
Это очень легко и просто. Сделай это
Вот результат: $ python2.7 main.py
источник
Для тех, кто приехал сюда и хочет получить как первый, так и последний день предыдущего месяца:
Вывод:
источник
Calendar
модуль: stackabuse.com/introduction-to-the-python-calendar-moduleисточник
Просто для удовольствия, чисто математический ответ с использованием divmod. Довольно бесполезно из-за умножения, с таким же успехом можно было бы выполнить простую проверку номера месяца (если он равен 12, увеличить год и т. Д.)
источник
С очень полной библиотекой Pendulum у нас есть
subtract
метод (а не subStract):Мы видим, что он справляется с прыжковыми годами.
Обратный эквивалент
add
.https://pendulum.eustace.io/docs/#addition-and-subtraction
источник
Существует библиотека высокого уровня,
dateparser
которая может определять прошедшую дату на естественном языке и возвращать соответствующийdatetime
объект Python.источник
Основываясь на комментарии @JF Sebastian, вы можете связать
replace()
функцию, чтобы вернуться на один «месяц». Поскольку месяц не является постоянным периодом времени, это решение пытается вернуться к той же дате в предыдущем месяце, что, конечно, не работает для всех месяцев. В таком случае этот алгоритм по умолчанию использует последний день предыдущего месяца.Вывод:
источник
Если вы хотите посмотреть на буквы ASCII в файле типа EXE в среде LINUX / UNIX, попробуйте «od -c 'filename' | more»
Вы, вероятно, получите много неузнаваемых элементов, но все они будут представлены, и будут отображаться шестнадцатеричные представления, а эквивалентные символы ASCII (при необходимости) будут следовать за строкой шестнадцатеричных кодов. Попробуйте это на скомпилированном фрагменте кода, который вам известен. Вы можете увидеть в нем то, что узнаете.
источник