【Python】datetimeで日付だけ取得・計算する方法を解説

目次から探す

日付の取得方法

Pythonのdatetimeモジュールを使用すると、現在の日付を簡単に取得したり、特定の日付を作成したりすることができます。

ここでは、具体的な方法について解説します。

現在の日付を取得する

現在の日付を取得する方法はいくつかありますが、ここでは代表的な2つの方法を紹介します。

datetime.date.today()の使用

datetime.date.today()を使用すると、現在の日付をdateオブジェクトとして取得できます。

以下はその例です。

from datetime import date
# 現在の日付を取得
current_date = date.today()
print(current_date)  # 例: 2023-10-01

この方法は、日付だけが必要な場合に便利です。

dateオブジェクトは、年、月、日を持つシンプルなオブジェクトです。

datetime.datetime.now().date()の使用

もう一つの方法は、datetime.datetime.now()を使用して現在の日時を取得し、その後date()メソッドを使用して日付部分だけを抽出する方法です。

from datetime import datetime
# 現在の日時を取得し、日付部分だけを抽出
current_date = datetime.now().date()
print(current_date)  # 例: 2023-10-01

この方法は、日時オブジェクトから日付部分だけを取り出したい場合に便利です。

特定の日付を作成する

特定の日付を作成する方法もいくつかあります。

ここでは、datetime.dateクラスdatetime.datetimeクラスを使用する方法を紹介します。

datetime.dateクラスの使用

datetime.dateクラスを使用すると、特定の日付を簡単に作成できます。

以下はその例です。

from datetime import date
# 特定の日付を作成
specific_date = date(2023, 10, 1)
print(specific_date)  # 2023-10-01

この方法は、年、月、日を指定してシンプルに日付を作成したい場合に便利です。

datetime.datetimeクラスの使用

datetime.datetimeクラスを使用すると、日時オブジェクトを作成し、その後date()メソッドを使用して日付部分だけを抽出することができます。

from datetime import datetime
# 特定の日時を作成
specific_datetime = datetime(2023, 10, 1, 12, 0, 0)
# 日付部分だけを抽出
specific_date = specific_datetime.date()
print(specific_date)  # 2023-10-01

この方法は、日時オブジェクトを作成し、その中から日付部分だけを取り出したい場合に便利です。

以上の方法を使えば、現在の日付を取得したり、特定の日付を作成したりすることが簡単にできます。

次に、日付の計算方法について解説します。

日付の計算方法

Pythonのdatetimeモジュールを使用すると、日付の加算や減算、日付の差分を簡単に計算することができます。

ここでは、timedeltaクラスを使った日付の計算方法について詳しく解説します。

日付の加算と減算

日付の加算や減算には、datetime.timedeltaクラスを使用します。

このクラスを使うことで、日付に対して日数や時間を加算・減算することができます。

timedeltaクラスの使用

timedeltaクラスは、日付や時間の差を表現するためのクラスです。

以下のように使用します。

from datetime import datetime, timedelta
# 現在の日付を取得
current_date = datetime.now().date()
# 10日間のtimedeltaを作成
delta = timedelta(days=10)
# 日付の加算
new_date = current_date + delta
# 日付の減算
previous_date = current_date - delta
print("現在の日付:", current_date)
print("10日後の日付:", new_date)
print("10日前の日付:", previous_date)

日付の加算例

具体的な日付の加算例を見てみましょう。

例えば、現在の日付に10日を加算する場合は以下のようにします。

from datetime import datetime, timedelta
# 現在の日付を取得
current_date = datetime.now().date()
# 10日間のtimedeltaを作成
delta = timedelta(days=10)
# 日付の加算
new_date = current_date + delta
print("現在の日付:", current_date)
print("10日後の日付:", new_date)
現在の日付: 2023-10-01
10日後の日付: 2023-10-11

日付の減算例

次に、現在の日付から10日を減算する例を見てみましょう。

from datetime import datetime, timedelta
# 現在の日付を取得
current_date = datetime.now().date()
# 10日間のtimedeltaを作成
delta = timedelta(days=10)
# 日付の減算
previous_date = current_date - delta
print("現在の日付:", current_date)
print("10日前の日付:", previous_date)
現在の日付: 2023-10-01
10日前の日付: 2023-09-21

日付の差分を計算する

日付の差分を計算することで、2つの日付の間の日数を求めることができます。

日付の差分を求める方法

2つの日付の差分を求めるには、単純に日付同士を引き算するだけです。

以下の例では、2つの日付の差分を計算しています。

from datetime import datetime
# 2つの日付を作成
date1 = datetime(2023, 10, 1).date()
date2 = datetime(2023, 10, 11).date()
# 日付の差分を計算
difference = date2 - date1
print("日付の差分:", difference)
日付の差分: 10 days, 0:00:00

差分の日数を取得する

差分の日数を取得するには、days属性を使用します。

以下の例では、差分の日数を取得しています。

from datetime import datetime
# 2つの日付を作成
date1 = datetime(2023, 10, 1).date()
date2 = datetime(2023, 10, 11).date()
# 日付の差分を計算
difference = date2 - date1
# 差分の日数を取得
days_difference = difference.days
print("差分の日数:", days_difference)
差分の日数: 10

以上が、Pythonのdatetimeモジュールを使用した日付の計算方法です。

timedeltaクラスを使うことで、日付の加算や減算、差分の計算が簡単に行えます。

日付のフォーマットと変換

Pythonのdatetimeモジュールを使用すると、日付を文字列に変換したり、文字列を日付に変換したりすることができます。

これにより、日付データを人間が読みやすい形式にしたり、特定のフォーマットで保存したりすることが可能です。

日付を文字列に変換する

日付を文字列に変換するためには、strftimeメソッドを使用します。

このメソッドは、指定したフォーマットに従って日付を文字列に変換します。

strftimeメソッドの使用

以下は、strftimeメソッドを使用して現在の日付を文字列に変換する例です。

from datetime import datetime
# 現在の日付と時刻を取得
now = datetime.now()
# 日付を文字列に変換
date_str = now.strftime("%Y-%m-%d")
print(date_str)  # 出力例: 2023-10-05

この例では、%Yが4桁の年、%mが2桁の月、%dが2桁の日を表しています。

フォーマット指定子の一覧

strftimeメソッドで使用できる主なフォーマット指定子は以下の通りです。

指定子説明
%Y4桁の年2023
%y2桁の年23
%m2桁の月01, 12
%d2桁の日01, 31
%H2桁の時(24時間)00, 23
%I2桁の時(12時間)01, 12
%M2桁の分00, 59
%S2桁の秒00, 59
%A曜日(英語)Monday
%a曜日(短縮形)Mon
%B月(英語)January
%b月(短縮形)Jan

文字列を日付に変換する

文字列を日付に変換するためには、strptimeメソッドを使用します。

このメソッドは、指定したフォーマットに従って文字列を日付オブジェクトに変換します。

strptimeメソッドの使用

以下は、strptimeメソッドを使用して文字列を日付に変換する例です。

from datetime import datetime
# 文字列の日付
date_str = "2023-10-05"
# 文字列を日付に変換
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
print(date_obj)  # 出力例: 2023-10-05 00:00:00

この例では、%Yが4桁の年、%mが2桁の月、%dが2桁の日を表しています。

フォーマット指定子の使用例

以下は、さまざまなフォーマット指定子を使用して文字列を日付に変換する例です。

from datetime import datetime
# 文字列の日付と時刻
datetime_str = "05/10/2023 14:30:00"
# 文字列を日付と時刻に変換
datetime_obj = datetime.strptime(datetime_str, "%d/%m/%Y %H:%M:%S")
print(datetime_obj)  # 出力例: 2023-10-05 14:30:00

この例では、%dが2桁の日、%mが2桁の月、%Yが4桁の年、%Hが2桁の時(24時間)、%Mが2桁の分、%Sが2桁の秒を表しています。

以上のように、strftimestrptimeメソッドを使用することで、日付と文字列の相互変換が簡単に行えます。

これにより、日付データの表示や保存が柔軟に行えるようになります。

実践例

ここでは、実際にPythonのdatetimeモジュールを使って日付を操作する具体的な例を紹介します。

これらの例を通じて、日付のリストを生成したり、特定の期間の日付を取得したり、日付の範囲チェックを行う方法を学びましょう。

日付のリストを生成する

まず、特定の期間の日付のリストを生成する方法を見てみましょう。

例えば、2023年1月1日から2023年1月10日までの日付のリストを生成する場合です。

from datetime import datetime, timedelta
# 開始日と終了日を設定
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 10)
# 日付のリストを生成
date_list = []
current_date = start_date
while current_date <= end_date:
    date_list.append(current_date)
    current_date += timedelta(days=1)
# 結果を表示
for date in date_list:
    print(date.strftime('%Y-%m-%d'))

このコードでは、start_dateからend_dateまでの日付を1日ずつ増やしながらリストに追加しています。

timedeltaを使って日付を1日ずつ増やすことがポイントです。

特定の期間の日付を取得する

次に、特定の期間の日付を取得する方法を見てみましょう。

例えば、2023年1月1日から2023年1月10日までの間の月曜日の日付を取得する場合です。

from datetime import datetime, timedelta
# 開始日と終了日を設定
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 10)
# 月曜日の日付を取得
monday_list = []
current_date = start_date
while current_date <= end_date:
    if current_date.weekday() == 0:  # 0は月曜日
        monday_list.append(current_date)
    current_date += timedelta(days=1)
# 結果を表示
for date in monday_list:
    print(date.strftime('%Y-%m-%d'))

このコードでは、current_date.weekday()を使って曜日をチェックし、月曜日であればリストに追加しています。

日付の範囲チェック

最後に、特定の日付が指定された範囲内にあるかどうかをチェックする方法を見てみましょう。

例えば、2023年1月5日が2023年1月1日から2023年1月10日までの範囲内にあるかどうかを確認する場合です。

from datetime import datetime
# チェックする日付と範囲を設定
check_date = datetime(2023, 1, 5)
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 10)
# 範囲内かどうかをチェック
if start_date <= check_date <= end_date:
    print(f"{check_date.strftime('%Y-%m-%d')}は範囲内です。")
else:
    print(f"{check_date.strftime('%Y-%m-%d')}は範囲外です。")

このコードでは、start_dateend_dateの間にcheck_dateが含まれているかどうかを条件式でチェックしています。

これらの実践例を通じて、datetimeモジュールを使った日付操作の基本的な方法を理解できたでしょう。

これらのテクニックを応用して、さまざまな日付操作を行ってみてください。

目次から探す