Pythonで月末を取得する方法

Pocket

Pythonで月末を取得する方法をネットで調べると次のような方法が見つかります。

import datetime
year = 2021
month = 6
last_date = datetime.date(year, month + 1, 1) - datetime.timedelta(days = 1)
print(last_date)

結果は「2021-06-30」となります。
「月末」は「翌月の1日の1日前」というロジックです。
ただ、この方法だと次の場合にエラーが出ます。

import datetime
year = 2021
month = 12
last_date = datetime.date(year, month + 1, 1) - datetime.timedelta(days = 1)
print(last_date)

12月の翌月は1月なのですが上のコードだと「13月」となります。
このとき「ValueError: month must be in 1..12」というエラーが出ます。
「月は1から12でないとダメ」というわけです。
他の言語だと「13月」を指定すると自動的に翌年の1月に変換するものがあるのですが、Pythonはダメです。

次のようにしてみます。

import datetime
year = 2021
month = 12
if month == 12:
  year += 1
  month = 0
last_date = datetime.date(year, month + 1, 1) - datetime.timedelta(days = 1)
print(last_date)

12月の場合だけ「翌年の0月」にします。
結果は「2021-12-31」となります。

timedeltaで翌月が指定できればいいのですが「months」がありません。

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

もっとスマートな方法があれば知りたいです。

なおライブラリ「calendar」を使うと次のようにして月末が取得できます。

import calendar
year = 2021
month = 12
result = calendar.monthrange(year, month)
print(result)

結果は「(2, 31)」となります。
monthrangeは月初の(日曜日を0とした)曜日と日数を返します。この日数が「月末の日」となります。

[ 2021年6月24日 | カテゴリー: Python, デジタル | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報