Python3で先月の1日とか先月末を取得する

こんにちは、おてらです。

Python3で「先月の1日」とか「先月末日」とかを取得するときに毎回ググってるので備忘録的に。

スポンサーリンク

先月の1日を取得する

力技

from datetime import date

first_day = date(year=date.today().year, month=date.today().month-1, day=1)
print(first_day.strftime('%Y-%m-%d'))

結果:2018-09-01

date関数使って年月日を決め打ちしてdateオブジェクトを作る方法。

大分冗長な書き方だけどこれ多分一番手っ取り早い気がします。

(追記)

ありがたいことに早速指摘いただきました。

今日の日付が1月だった場合、dateオブジェクトを作る際の引数の month=date.today().month-1 が0になってエラーになります。

ということで1日を取得する場合は力技を使わずに relativedelta を使う方がいいですね。

もうちょっとスマートに

月単位や年単位で日付の計算が出来るようになる python-dateutil ライブラリを使えばもうちょっとスマートにというか、視認性よく出来ます。

pip install python-dateutil
from datetime import date
from dateutil.relativedelta import relativedelta

first_day = date.today().replace(day=1) - relativedelta(months=1)
print(first_day.strftime('%Y-%m-%d'))

結果:2018-09-01

どちらも結果は同じですが、後者の方が「あーなんか今日の日付取得して日にちを1日に変換したあと1ヵ月引き算してるな~」っていうのが分かりやすい感じがします。

前者はPython標準の関数だけで実行できます。

先月末の取得

「先月末」の場合、月末は30日と31日のパターンがあるので今月の1日から1日減算するのがセオリーです。多分。

from datetime import date, timedelta

last_day = date.today().replace(day=1) - timedelta(1)
print(last_day.strftime('%Y-%m-%d'))

結果:2018-09-30

先月末の場合、前述の力技方式で出来ないことはないですが1日を取得するときに比べて力技でやる必要がないのでこれが一番いいと思います。

フォローする

スポンサーリンク