Pythonで月末を取得する方法
Pythonで月末を取得する方法をネットで調べると次のような方法が見つかります。
import datetime
year = 2021
month = 6
last_date = datetime.date(year, month + 1, 1) - datetime.timedelta(days = 1)
print(last_date)
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)
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)
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)
year = 2021
month = 12
result = calendar.monthrange(year, month)
print(result)
結果は「(2, 31)」となります。
monthrangeは月初の(日曜日を0とした)曜日と日数を返します。この日数が「月末の日」となります。
[ 2021年6月24日 | カテゴリー: Python, デジタル | タグ: datetime ]
« 日立妻子6人殺害事件で最も驚いたこと | 福岡県で起きた二つの大事件の意外な接点 »
コメントを残す