Python を使用して月の最後の日を見つける
- Python でカレンダー ライブラリを使用して月の最後の日を見つける
- Python で DateTime モジュールを使用して月の最後の日を見つける
- 矢印ライブラリを使用して月の最後の日を見つける
- Pandas モジュールを使用して月の最後の日を見つける
- まとめ
毎月の最終日を覚えて、それを確実に把握するのは難しい場合があります。 数行のコードで任意の年の任意の月の最終日を表示するコンピューター プログラムが必要だと考えたことはありますか?
この記事では、標準の Python ライブラリを使用して月の最終日を簡単に見つけることができる Python プログラムを作成する方法を説明します。 calendar
や datetime
などの組み込みライブラリと、pandas
や arrow
などのサードパーティ ライブラリを使用して、Python で月の最終日を見つけます。
Python でカレンダー ライブラリを使用して月の最後の日を見つける
このセクションでは、組み込みの Python ライブラリ calendar
を使用して、月の最後の日を見つけます。
このプログラムは、calendar
サブ関数 monthrange
を使用します。これは、year
と month
の 2つのパラメーター引数を取り、(week_day_of_first_day, number_of_days)
のキー ペア値を返します。
最初の値は月の最初の平日 (0 は月曜日、6 は日曜日) を示し、2 番目の値は月の最後の日を示します。
import calendar
last_day = calendar.monthrange(2000, 1)
print(last_day)
1 月は 31 日あり、2000 年の最初の日は土曜日でした。
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
(5, 31)
Process finished with exit code 0
閏年 を入力として与えて、プログラムが Python で月の最後の日を正しく検出するかどうかを確認してみましょう。
import calendar
last_day1 = calendar.monthrange(2000, 2)
print(last_day1)
last_day2 = calendar.monthrange(2004, 2)
print(last_day2)
それに応じて閏年が表示されます。
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
(1, 29)
(6, 29)
Process finished with exit code 0
Python で DateTime モジュールを使用して月の最後の日を見つける
datetime
ライブラリは、Python で月の最後の日を見つけるために使用される組み込みライブラリでもあります。
毎月の最初の日から 1 日を引いて、その月の最後の日を見つける
このプログラムは、月と年が入力として提供される月の最終日を見つけます。
import datetime
year = 2001
month = 2
v = datetime.date(year + int(month / 12), (month % 12) + 1, 1) - datetime.timedelta(
days=1
)
print(v)
コードを分解してみましょう:
最初の行は datetime
ライブラリをインポートします。 年と月を入力する 2つの変数 year
と month
が作成されます。 サブ関数 datetime.date()
は、パラメーター内の 3つの値を日付として受け取ります。
このプログラムは、月の初日から 1 日さかのぼると前月の末日になるというロジックを使用しています。 これにより、12 月を除くすべての月の最終日が得られ、12 月は前年の最終日になります。
プログラムは、次の行を使用してこの問題に対処するために、12 月の年に 1
を追加します。
datetime.date(year + int(month / 12))
同様に、その月が 12 月の場合、プログラムは month % 12
のモジュラスに 1
を追加します。
これにより、月が 1
に設定されます。これは、現在の年を変更せずに 12
と同じ日数になります。 最後に、datetime.timedelta(days=1)
関数を使用して、現在の日付から 1 日を減算します。
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2001-02-28
Process finished with exit code 0
datetime
ライブラリを使用してこれを行う別の方法は、メソッドを作成し、メソッドから 2つの値を返すことです。1つは 12 月用で、もう 1つは残りの月用です。 以下のプログラムを確認してみましょう。
import datetime
def last_day_of_month(date):
if date.month == 12:
return date.replace(day=31)
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
print(last_day_of_month(datetime.date(2022, 10, 25)))
メソッド last_day_of_month
はパラメーター date
で作成されます。 if
ステートメント内では、date.month == 12
を使用して月が 12 月かどうかがチェックされます。
条件が真の場合、日付は date.replace(day=31)
に置き換えられます。 それ以外の場合、date
は、month=date.month + 1
をインクリメントすることによって初日と翌月に置き換えられ、そこから 1 日が減算され、日付が指定された月の最後の日付になります。
以下に例を示します。
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
最後に、日付 datetime.date()
を渡してメソッドを呼び出し、出力します。 これは、前の例よりも簡単なソリューションを提供します。
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-10-31
Process finished with exit code 0
for
ループを使用して配列に格納されたプリロードされた日付を使用して月の最後の日を見つける
datetime
ライブラリを使用するもう 1つの例は、月の最後の日の配列を作成し、それをループで実行して、datetime
ライブラリに無効な日付を除外させることです。
以下のコード例を参照してください。
from datetime import datetime
def find_last_day(year, month):
end_days = [31, 30, 29, 28, 27]
for i in end_days:
try:
date = datetime(year, month, i)
except ValueError:
continue
else:
return date.date()
return None
print(find_last_day(2020, 2))
このプログラムは、メソッド find_last_day()
を year
と month
の 2つのパラメーターと共に使用します。 配列 end_days
には、可能な最後の数日が保存されます。
end_days
の要素数だけ実行される for
ループが作成されます。 try
ブロック内で、変数は datetime()
サブ関数を使用して日付を格納します。
月と年の値はパラメータごとに設定され、日の値には i
が格納されます。
except
ブロック内では、ValueError
の条件が指定され、変数 date
の i
値が無効な月の値として破棄されます。 次に、continue
を使用してループを再実行します。
このメソッドは、有効な値が見つかった場合、else
ブロック内で date
を返します。 最後に、メソッドが他の値を返さないように、return None
が使用されます。
プログラムは、指定された配列から day
の適切な値を検索します。 12 月の場合、ループは 31 を見つけて値を返します。 11 月などの月は 30 しかないため、その日に返されます。
同様に、2 月 31 日と 30 日はあり得ないので、ループはそれらにまたがって実行されます。 指定された年がうるう年の場合、ループによって 29 が返されます。 それ以外の場合は、28 が返されます。
最後に、このメソッドは、2 月と 2020 年を渡すことによって呼び出されます。
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2020-02-29
Process finished with exit code 0
ご覧のとおり、2020 年 2 月はうるう年でした。
月の最後の日を見つけるために、暦年のすべての月の最後の日を印刷する
ライブラリ datetime
を使用して、Python で暦年のすべての月の最後の日を見つけ、すべてを出力することもできます。 プログラムを見てみましょう。
import datetime
def month_end(date):
next_month = date.replace(day=28) + datetime.timedelta(days=4)
return next_month - datetime.timedelta(days=next_month.day)
for month in range(1, 13):
print(month_end(datetime.date(2022, month, 1)))
コードを分解してみましょう:
パラメータ date
を取るメソッド month_end
が作成されます。 このメソッド内で、変数 next_month
は date
を取り、date.replace(day=28)
を使用して日を 28
に置き換えます。これは、毎月最低 28 日があるためです。
値が置き換えられた後、この値に 4 日が追加され、前月の日数に応じて date
が翌月の 1 日または 2 日にシフトされます。
現在の日付が 2000, 3, 4
で、今月の日の値が 4
であるとします。 date
からこの日の値を引くと、前月の最終日 - 2000, 2, 28
になります。 このロジックは、このプログラムで使用されています。
変数 next_month
の日はそれ自体から減算され、次の構文を使用してメソッドから返されます。
return next_month - datetime.timedelta(days=next_month.day)
インスタンス month
を使用して (1,13)
の範囲でループを実行する for
ループを作成しました。 ループ内では、datetime.date
を渡すことによってメソッド month_end
が呼び出され、メソッドに年と日が提供されます。
月は、メソッドに 12 か月を渡すために for
ループ内で使用されるインスタンス month
に置き換えられます。
for month in range(1, 13):
print(month_end(datetime.date(2022, month, 1)))
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-01-31
2022-02-28
2022-03-31
2022-04-30
2022-05-31
2022-06-30
2022-07-31
2022-08-31
2022-09-30
2022-10-31
2022-11-30
2022-12-31
Process finished with exit code 0
出力に示されているのは、暦年のすべての最後の日です。
矢印ライブラリを使用して月の最後の日を見つける
これは、日付操作に使用できるサードパーティの Python ライブラリです。 Python で月の最後の日を見つけるために使用されます。
このプログラムは、Arrow サブ関数 utcnow()
を使用して、現在の世界時を取得します。 ceil('month').date
を使用して月の上限を見つけます。
import arrow
print(arrow.utcnow().ceil("month").date())
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-10-31
Process finished with exit code 0
このコードは、今月の最後の日付を示します。
Pandas モジュールを使用して月の最後の日を見つける
このセクションでは、サードパーティの Python ライブラリである Pandas を使用して、その月の最終日を見つけます。 ここでは、プログラムは datetime
と pandas
の 2つのライブラリ パッケージをインポートします。
パラメータ date
を受け取るメソッド check_month_end
が作成されます。 このメソッドはパラメーター date
を取り、date + pd.offsets.MonthEnd(0)
を使用してその月の残りの日数を追加します。
以下はコード例です。
from datetime import datetime
import pandas as pd
def check_month_end(date):
return date + pd.offsets.MonthEnd(0)
print(check_month_end(datetime(2005, 2, 6)))
print(check_month_end(datetime(2004, 2, 29)))
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2005-02-28 00:00:00
2004-02-29 00:00:00
Process finished with exit code 0
出力は Pandas タイムスタンプ形式で、月の最終日が表示されます。
Pandas を使用して、ある日が月の最後の日かどうかを確認する
Pandas を使用して、特定の日付が月の最終日かどうかを確認できます。 以前のいくつかのプログラムとは異なり、このプログラムはユーザー入力を受け取り、指定された日が有効かどうかをチェックします。
プログラムは、パラメータ値を使用して、date + pd.offsets.MonthEnd(0) == date
を使用して月末と一致するかどうかを確認します。 このメソッドは、呼び出されるとブール値を返します。
提供されているサンプル コードを参照してください。
from datetime import datetime
import pandas as pd
def check_month_end(date):
return date + pd.offsets.MonthEnd(0) == date
print(check_month_end(datetime(1996, 5, 16)))
print(check_month_end(datetime(1996, 5, 31)))
出力:
"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
False
True
Process finished with exit code 0
まとめ
この記事では、datetime
や calendar
などの組み込みライブラリ、および arrow
や pandas
などのサードパーティ ライブラリを使用して、Python で月の最終日を見つけるさまざまな方法を学びました。