【Python】日付同士を計算する方法

この記事では、Pythonのdatetimeモジュールを使って日付の差を計算したり、日付に日数を加算・減算する方法をわかりやすく解説します。

また、日付のフォーマットや文字列から日付への変換方法、さらには誕生日から年齢を計算する実践的な例も紹介します。

初心者の方でも理解しやすいように、サンプルコードとその実行結果を交えて説明しますので、ぜひ最後まで読んでみてください。

目次から探す

日付の差を計算する

Pythonでは、日付や時間の計算を簡単に行うためにdatetimeモジュールが提供されています。

このモジュールを使うことで、日付同士の差を計算したり、日付に特定の日数を加算・減算することができます。

ここでは、日付の差を計算する方法について詳しく解説します。

timedeltaオブジェクトの概要

timedeltaとは

timedeltaは、Pythonのdatetimeモジュールに含まれるクラスで、2つの日時の差を表現するために使用されます。

timedeltaオブジェクトは、日数、秒、マイクロ秒などの時間の差を保持します。

timedeltaの基本的な使い方

timedeltaオブジェクトは、以下のようにして作成することができます。

from datetime import timedelta
# 2日間のtimedeltaオブジェクトを作成
delta = timedelta(days=2)
print(delta)

このコードを実行すると、2 days, 0:00:00と表示されます。

timedeltaオブジェクトは、日数、秒、マイクロ秒を指定して作成することができます。

日付の差を求める

2つのdatetimeオブジェクトの差を計算する

2つのdatetimeオブジェクトの差を計算するには、単純に引き算を行います。

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

from datetime import datetime
# 2つのdatetimeオブジェクトを作成
date1 = datetime(2023, 10, 1)
date2 = datetime(2023, 10, 10)
# 日付の差を計算
delta = date2 - date1
print(delta)

このコードを実行すると、9 days, 0:00:00と表示されます。

これは、2つの日付の差が9日間であることを示しています。

計算結果のtimedeltaオブジェクトの利用方法

計算結果として得られるtimedeltaオブジェクトは、さまざまな方法で利用することができます。

例えば、日数や秒数を取得したり、他のtimedeltaオブジェクトと加算・減算することができます。

# 日数を取得
days = delta.days
print(f"日数: {days}日")
# 秒数を取得
seconds = delta.seconds
print(f"秒数: {seconds}秒")

このコードを実行すると、日数: 9日秒数: 0秒が表示されます。

日付の差を日数、時間、分に変換する

days属性の利用

timedeltaオブジェクトのdays属性を使うことで、日付の差を日数として取得することができます。

days = delta.days
print(f"日数: {days}日")

seconds属性の利用

timedeltaオブジェクトのseconds属性を使うことで、日付の差を秒数として取得することができます。

seconds = delta.seconds
print(f"秒数: {seconds}秒")

total_seconds()メソッドの利用

total_seconds()メソッドを使うことで、timedeltaオブジェクトの全体の秒数を取得することができます。

これを使うと、日数や時間、分に変換することが容易になります。

total_seconds = delta.total_seconds()
print(f"総秒数: {total_seconds}秒")
# 総秒数を日数、時間、分に変換
days = total_seconds // (24 * 3600)
hours = (total_seconds % (24 * 3600)) // 3600
minutes = (total_seconds % 3600) // 60
print(f"日数: {days}日, 時間: {hours}時間, 分: {minutes}分")

このコードを実行すると、総秒数: 777600.0秒日数: 9日, 時間: 0時間, 分: 0分が表示されます。

以上が、Pythonを使って日付同士を計算する方法の基本的な解説です。

timedeltaオブジェクトを活用することで、日付や時間の計算が非常に簡単に行えるようになります。

日付の加算と減算

Pythonでは、datetimeモジュールを使用して日付の加算や減算を簡単に行うことができます。

特に、timedeltaオブジェクトを使うことで、日付に対して特定の日数や時間を加算・減算する操作が非常に簡単になります。

日付に日数を加算する

timedeltaを使った日付の加算方法

timedeltaオブジェクトを使うことで、特定の日数や時間を日付に加算することができます。

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

from datetime import datetime, timedelta
# 現在の日付と時刻を取得
now = datetime.now()
# 7日を表すtimedeltaオブジェクトを作成
seven_days = timedelta(days=7)
# 現在の日付に7日を加算
future_date = now + seven_days
print("現在の日付:", now)
print("7日後の日付:", future_date)

実際のコード例

上記のコードを実行すると、現在の日付と7日後の日付が表示されます。

以下は実行結果の例です。

現在の日付: 2023-10-01 12:34:56.789012
7日後の日付: 2023-10-08 12:34:56.789012

このように、timedeltaオブジェクトを使うことで、簡単に日付に対して日数を加算することができます。

日付から日数を減算する

timedeltaを使った日付の減算方法

同様に、timedeltaオブジェクトを使って日付から特定の日数を減算することもできます。

例えば、現在の日付から7日を減算する場合、以下のようにします。

from datetime import datetime, timedelta
# 現在の日付と時刻を取得
now = datetime.now()
# 7日を表すtimedeltaオブジェクトを作成
seven_days = timedelta(days=7)
# 現在の日付から7日を減算
past_date = now - seven_days
print("現在の日付:", now)
print("7日前の日付:", past_date)

実際のコード例

上記のコードを実行すると、現在の日付と7日前の日付が表示されます。

以下は実行結果の例です。

現在の日付: 2023-10-01 12:34:56.789012
7日前の日付: 2023-09-24 12:34:56.789012

このように、timedeltaオブジェクトを使うことで、簡単に日付から日数を減算することができます。

以上のように、timedeltaオブジェクトを使うことで、日付の加算や減算を簡単に行うことができます。

これにより、日付の操作が非常に柔軟に行えるようになります。

日付のフォーマットとパース

Pythonでは、日付や時間を特定のフォーマットに変換したり、文字列から日付オブジェクトに変換することができます。

これを行うために、datetimeモジュールのstrftime()メソッドstrptime()メソッドを使用します。

日付のフォーマット

日付オブジェクトを特定のフォーマットに変換するためには、strftime()メソッドを使用します。

このメソッドを使うことで、日付や時間を任意の形式で文字列に変換することができます。

strftime()メソッドの使い方

strftime()メソッドは、datetimeオブジェクトに対して呼び出され、フォーマットコードを引数として渡します。

以下に基本的な使い方の例を示します。

from datetime import datetime
# 現在の日付と時刻を取得
now = datetime.now()
# 日付を特定のフォーマットに変換
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)  # 例: 2023-10-05 14:30:00

よく使われるフォーマットコード

strftime()メソッドで使用されるフォーマットコードは多数ありますが、以下にいくつかのよく使われるコードを示します。

フォーマットコード説明
%Y西暦(4桁)2023
%m月(2桁)01, 12
%d日(2桁)01, 31
%H時(24時間表記、2桁)00, 23
%M分(2桁)00, 59
%S秒(2桁)00, 59
%A曜日(英語)Monday
%a曜日(短縮形、英語)Mon
%B月名(英語)January
%b月名(短縮形、英語)Jan

文字列から日付への変換

文字列から日付オブジェクトに変換するためには、strptime()メソッドを使用します。

このメソッドは、文字列とフォーマットコードを引数として受け取り、対応するdatetimeオブジェクトを返します。

strptime()メソッドの使い方

strptime()メソッドの基本的な使い方を以下に示します。

from datetime import datetime
# 文字列を日付オブジェクトに変換
date_string = "2023-10-05 14:30:00"
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(date_object)  # 例: 2023-10-05 14:30:00

実際のコード例

以下に、文字列から日付オブジェクトに変換し、その後フォーマットを変更する実際のコード例を示します。

from datetime import datetime
# 文字列を日付オブジェクトに変換
date_string = "2023-10-05 14:30:00"
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
# 日付オブジェクトを特定のフォーマットに変換
formatted_date = date_object.strftime("%A, %B %d, %Y %I:%M %p")
print(formatted_date)  # 例: Thursday, October 05, 2023 02:30 PM

このようにして、strptime()メソッドを使って文字列から日付オブジェクトに変換し、strftime()メソッドを使って任意のフォーマットに変換することができます。

これにより、日付や時間の操作が非常に柔軟に行えるようになります。

実践的な例

ここでは、実際にPythonを使って日付の計算を行う具体的な例を紹介します。

特に、誕生日から年齢を計算する方法や、未来の日付や過去の日付を計算する方法について詳しく解説します。

誕生日から年齢を計算する

まずは、誕生日から現在の年齢を計算する方法を見ていきましょう。

誕生日をdatetimeオブジェクトに変換

誕生日を文字列として入力し、それをdatetimeオブジェクトに変換します。

以下のコード例を見てください。

from datetime import datetime
# 誕生日を文字列として入力
birthday_str = "1990-01-01"
# 文字列をdatetimeオブジェクトに変換
birthday = datetime.strptime(birthday_str, "%Y-%m-%d")
print("誕生日:", birthday)

このコードでは、strptimeメソッドを使って文字列をdatetimeオブジェクトに変換しています。

現在の日付との差を計算

次に、現在の日付との差を計算します。

以下のコード例を見てください。

from datetime import datetime
# 現在の日付を取得
now = datetime.now()
# 誕生日をdatetimeオブジェクトに変換
birthday_str = "1990-01-01"
birthday = datetime.strptime(birthday_str, "%Y-%m-%d")
# 現在の日付との差を計算
age_timedelta = now - birthday
print("現在の日付との差:", age_timedelta)

このコードでは、datetime.now()を使って現在の日付を取得し、それを誕生日から引いて差を計算しています。

年齢を求める方法

計算した差を使って年齢を求めます。

以下のコード例を見てください。

from datetime import datetime
# 現在の日付を取得
now = datetime.now()
# 誕生日をdatetimeオブジェクトに変換
birthday_str = "1990-01-01"
birthday = datetime.strptime(birthday_str, "%Y-%m-%d")
# 現在の日付との差を計算
age_timedelta = now - birthday
# 年齢を求める
age = age_timedelta.days // 365
print("年齢:", age)

このコードでは、timedeltaオブジェクトのdays属性を使って日数を取得し、それを365で割ることで年齢を求めています。

未来の日付を計算する

次に、現在の日付に特定の日数を加算して未来の日付を計算する方法を見ていきましょう。

現在の日付に特定の日数を加算

以下のコード例を見てください。

from datetime import datetime, timedelta
# 現在の日付を取得
now = datetime.now()
# 未来の日付を計算(30日後)
future_date = now + timedelta(days=30)
print("30日後の日付:", future_date)

このコードでは、timedeltaオブジェクトを使って現在の日付に30日を加算しています。

未来の日付を表示する

計算した未来の日付を表示します。

以下のコード例を見てください。

from datetime import datetime, timedelta
# 現在の日付を取得
now = datetime.now()
# 未来の日付を計算(30日後)
future_date = now + timedelta(days=30)
# 未来の日付を表示
print("30日後の日付:", future_date.strftime("%Y-%m-%d"))

このコードでは、strftimeメソッドを使って未来の日付をフォーマットし、表示しています。

過去の日付を計算する

最後に、現在の日付から特定の日数を減算して過去の日付を計算する方法を見ていきましょう。

現在の日付から特定の日数を減算

以下のコード例を見てください。

from datetime import datetime, timedelta
# 現在の日付を取得
now = datetime.now()
# 過去の日付を計算(30日前)
past_date = now - timedelta(days=30)
print("30日前の日付:", past_date)

このコードでは、timedeltaオブジェクトを使って現在の日付から30日を減算しています。

過去の日付を表示する

計算した過去の日付を表示します。

以下のコード例を見てください。

from datetime import datetime, timedelta
# 現在の日付を取得
now = datetime.now()
# 過去の日付を計算(30日前)
past_date = now - timedelta(days=30)
# 過去の日付を表示
print("30日前の日付:", past_date.strftime("%Y-%m-%d"))

このコードでは、strftimeメソッドを使って過去の日付をフォーマットし、表示しています。

以上で、Pythonを使った日付の計算方法についての解説を終わります。

これらの方法を使えば、日付の差を計算したり、未来や過去の日付を求めたりすることが簡単にできます。

目次から探す