Python G

このチュートリアルでは、Pythonで2つの日付の間の日数を取得する方法について見ていきます。

Pythonの組み込みパッケージである datetime を使って、Pythonで datetime オブジェクトを簡単に扱うことができます。

Datetimeオブジェクトの作成

datetimeはビルトインモジュールなので、Pythonファイルの先頭でimportすれば、すぐにアクセスできます。

datetimeオブジェクトはいくつかの異なる方法で作成することができます。

from datetime import datetime


date_string = "1 January, 2021"


now = datetime.now() # Create Datetime based on system clock
dt1 = datetime(day=1, month=1, year=2021) # Create Datetime with given arguments
dt2 = datetime.strptime(date_string, "%d %B, %Y") # Create Datetime from String


Pythonで文字列をDatetimeに変換する際には、従うべき一定のルールがあります。

Pythonで日付間の日数を取得する

datetime モジュールを使わずに日付と日付の間の日数を計測しようとすると、閏年や各月の日数を考慮する必要があり、独自の実装を作成するのは無意味な作業となります。

ということです。
しかし、datetimeを使えば、それはとても簡単なことです。

単純に datedatetime を引き算して、その間の日数を得ることができます。

from datetime import datetime


date1 = datetime.now()
date2 = datetime(day=1, month=7, year=2021)


timedelta = date2 - date1
print(timedelta)


これは days, seconds, microseconds を含む timedelta オブジェクトを返し、任意の2つの date/time または datetime オブジェクト間の継続時間を表します。

このオブジェクトをプリントすると、そのイベントまでの日数、時間、分、秒、マイクロ秒が返されます。

149 days, 5:22:52.255124


もし、これらのメトリクスに興味がなければ、timedelta.days, timedelta.seconds, timedelta.microseconds でアクセスしたいメトリクスを指定することができます。

now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now


print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)


ここでは、 now から new_years までの日数を countdown に代入しているが、これは timedelta オブジェクトである。

そして、そのオブジェクトの days パラメータにアクセスすることで、両者の間の日数を取得することができます。この結果は

Today is:  2021-02-01 18:35:12.272524
New Year is on:  2022-01-01 00:00:00
Days until New Years:  333


TimeDeltaを使った日数の足し算・引き算

2 つの既知の日付を互いに引き算する代わりに、時間枠を足したり引いたりしたいとしたらどうでしょうか。たとえば、ある顧客が月額料金制のサービスを契約したとします。この場合、30日後に更新するよう通知する必要があります。

その30日間のタイムフレームを timedelta を使って作成し、他の datetime オブジェクトからそれを足したり引いたりすることができます。

from datetime import datetime, timedelta


now = datetime.now()
thirty_days = timedelta(days=30)


print('In 30 days: ', now + thirty_days)
print('30 days ago: ', now - thirty_days)


この結果は

In 30 days:  2021-03-03 18:41:49.922082
30 days ago:  2021-01-02 18:41:49.922082


これは、スケジューリングや、移動ウィンドウ (たとえば末尾の 30 日間) に基づいてデータベースエントリを取得しようとするときに、非常に便利な機能です。

結論

このチュートリアルでは、Pythonで2つの日付の間の日数を取得するために必要なことすべてをカバーしました。

この機能を実現するために、 datetime オブジェクトと timedelta を使ってきました。

タイトルとURLをコピーしました