Python datetime で時間を加算する方法

PythonBeginner
オンラインで実践に進む

はじめに

Python の datetime モジュールは、日付と時刻を扱うための強力なツールです。このチュートリアルでは、datetime オブジェクトに時間を加えるさまざまな方法について説明し、Python で正確で柔軟な時間計算を実行するお手伝いをします。timedelta を使用した簡単な加算方法と、時間操作の実用的な例を学びます。

Python の Datetime を理解する

時間を加える前に、datetime モジュールの基本的な構成要素を理解することが重要です。

核心の Datetime コンポーネント

datetime モジュールは、いくつかの重要なクラスを提供します。

クラス 説明
date 日付を表します (年、月、日)
time 時間を表します (時、分、秒)
datetime 日付と時間を組み合わせます
timedelta 時間の期間を表します

Datetime オブジェクトの作成

datetime オブジェクトは、いくつかの方法で作成できます。どのように行うかを確認するために、簡単な Python スクリプトを作成しましょう。

WebIDE の統合ターミナルを開き、まだプロジェクトディレクトリにいない場合は、プロジェクトディレクトリに移動します。

cd ~/project

WebIDE のファイルエクスプローラーまたはコマンドラインを使用して、~/project ディレクトリに datetime_basics.py という名前の新しいファイルを作成します。

touch datetime_basics.py

WebIDE エディターで datetime_basics.py を開き、以下のコードを追加します。

from datetime import date, time, datetime

## 日付オブジェクトの作成
current_date = date.today()
print(f"現在の日付:{current_date}")

## 時間オブジェクトの作成 (現在の datetime から)
current_time = datetime.now().time()
print(f"現在の時間:{current_time}")

## datetime オブジェクトの作成
current_datetime = datetime.now()
print(f"現在の datetime: {current_datetime}")

## 特定の datetime オブジェクトの作成
specific_datetime = datetime(2023, 6, 15, 14, 30, 45)
print(f"特定の datetime: {specific_datetime}")

ファイルを保存します。次に、ターミナルからスクリプトを実行します。

python datetime_basics.py

出力は次のようになります。

現在の日付: YYYY-MM-DD
現在の時間: HH:MM:SS.マイクロ秒
現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
特定の datetime: 2023-06-15 14:30:45

これは、基本的な datetime、および datetime オブジェクトを作成する方法を示しています。

重要な Datetime 属性

datetime オブジェクトには、yearmonthdayhourminutesecond などの属性があり、アクセスできます。

これらの属性にアクセスする方法を示すために、datetime_basics.py スクリプトに追加しましょう。

datetime_basics.py を再度開き、最後に以下の行を追加します。

print(f"年:{specific_datetime.year}")
print(f"月:{specific_datetime.month}")
print(f"日:{specific_datetime.day}")
print(f"時:{specific_datetime.hour}")
print(f"分:{specific_datetime.minute}")
print(f"秒:{specific_datetime.second}")

ファイルを保存し、もう一度実行します。

python datetime_basics.py

出力には、specific_datetime の個々のコンポーネントが含まれます。

現在の日付: YYYY-MM-DD
現在の時間: HH:MM:SS.マイクロ秒
現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
特定の datetime: 2023-06-15 14:30:45
年: 2023
月: 6
日: 15
時: 14
分: 30
秒: 45

これらの基本を理解することは、時間加算を実行するための最初のステップです。

timedelta を使用した時間の加算

Python で datetime オブジェクトに時間を加える最も一般的な方法は、timedelta クラスを使用することです。timedelta オブジェクトは期間を表します。

timedelta オブジェクトの作成

timedelta オブジェクトは、dayshoursminutessecondsmillisecondsmicroseconds などのさまざまな時間単位を使用して作成できます。

timedelta を探求するために、新しい Python スクリプトを作成しましょう。

~/project ディレクトリに time_addition.py という名前の新しいファイルを作成します。

touch time_addition.py

time_addition.py を開き、以下のコードを追加します。

from datetime import datetime, timedelta

## 現在の datetime を取得する
current_datetime = datetime.now()
print(f"現在の datetime: {current_datetime}")

## 5 日間の timedelta を作成する
five_days = timedelta(days=5)
print(f"5 日間の Timedelta: {five_days}")

## 3 時間 30 分の timedelta を作成する
three_hours_thirty_minutes = timedelta(hours=3, minutes=30)
print(f"3 時間 30 分の Timedelta: {three_hours_thirty_minutes}")

## 1 週間 2 日間の timedelta を作成する
one_week_two_days = timedelta(weeks=1, days=2)
print(f"1 週間 2 日間の Timedelta: {one_week_two_days}")

ファイルを保存して実行します。

python time_addition.py

出力には、現在の datetime と作成された timedelta オブジェクトが表示されます。

現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
5 日間の Timedelta: 5 days, 0:00:00
3 時間 30 分の Timedelta: 3:30:00
1 週間 2 日間の Timedelta: 9 days, 0:00:00

timedelta(weeks=1, days=2)9 days で表されていることに注意してください。timedelta は、期間を日、秒、マイクロ秒に正規化します。

datetime に timedelta を加える

timedelta オブジェクトを datetime オブジェクトに加えることで、将来の時点を表す新しい datetime オブジェクトを取得できます。

時間加算を実行するために、time_addition.py にコードを追加しましょう。

time_addition.py を開き、最後に以下の行を追加します。

## 現在の datetime に 5 日加算する
future_datetime_days = current_datetime + five_days
print(f"5 日加算後の datetime: {future_datetime_days}")

## 現在の datetime に 3 時間 30 分加算する
future_datetime_hours_minutes = current_datetime + three_hours_thirty_minutes
print(f"3 時間 30 分加算後の datetime: {future_datetime_hours_minutes}")

## 現在の datetime に 1 週間 2 日加算する
future_datetime_weeks_days = current_datetime + one_week_two_days
print(f"1 週間 2 日加算後の datetime: {future_datetime_weeks_days}")

ファイルを保存して実行します。

python time_addition.py

出力には、元の datetime と、timedelta オブジェクトを加算した後の結果の datetime が表示されます。

現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
5 日間の Timedelta: 5 days, 0:00:00
3 時間 30 分の Timedelta: 3:30:00
1 週間 2 日間の Timedelta: 9 days, 0:00:00
5 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
3 時間 30 分加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
1 週間 2 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒

出力は、加算後の新しい datetime の値を示しています。これは、時間を加算するための timedelta の基本的な使用方法を示しています。

実用的な時間計算

timedelta は、将来の日付の計算や、2 つの時点間の期間の計算など、実用的な時間計算に非常に役立ちます。

将来の日付の計算

特定の日数、週数、あるいは年数(年を日数に変換することで)後の日付を簡単に計算できます。

time_addition.py に将来の日付を計算する関数を追加しましょう。

time_addition.py を開き、以下の関数定義と使用例を最後に追加します。

def get_future_date(start_date, days_to_add):
    """指定日数後の日付を計算します。"""
    future_date = start_date + timedelta(days=days_to_add)
    return future_date

## 例:現在から 30 日後の日付を求める
thirty_days_from_now = get_future_date(datetime.now(), 30)
print(f"現在から 30 日後の日付:{thirty_days_from_now}")

ファイルを保存して実行します。

python time_addition.py

出力には、現在の日付から 30 日後の日付が含まれます。

現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
5 日間の Timedelta: 5 days, 0:00:00
3 時間 30 分の Timedelta: 3:30:00
1 週間 2 日間の Timedelta: 9 days, 0:00:00
5 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
3 時間 30 分加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
1 週間 2 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
現在から 30 日後の日付: YYYY-MM-DD HH:MM:SS.マイクロ秒

時間差の計算

2 つの datetime オブジェクトから一方を引くことで、それらの間の期間を表す timedelta オブジェクトを取得することもできます。

time_addition.py に 2 つの日期間の差分を計算するコードを追加しましょう。

time_addition.py を開き、最後に以下のコードを追加します。

## 2 つの特定の datetime 間の差分を計算する
date1 = datetime(2023, 1, 1)
date2 = datetime(2023, 12, 31)

time_difference = date2 - date1
print(f"{date1} と {date2} の差分:{time_difference}")

## timedelta の差分の構成要素にアクセスする
print(f"日数の差分:{time_difference.days}")
print(f"合計秒数の差分:{time_difference.total_seconds()}")

ファイルを保存して実行します。

python time_addition.py

出力には、2 つの日期間の差分が表示されます。

現在の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
5 日間の Timedelta: 5 days, 0:00:00
3 時間 30 分の Timedelta: 3:30:00
1 週間 2 日間の Timedelta: 9 days, 0:00:00
5 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
3 時間 30 分加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
1 週間 2 日加算後の datetime: YYYY-MM-DD HH:MM:SS.マイクロ秒
現在から 30 日後の日付: YYYY-MM-DD HH:MM:SS.マイクロ秒
2023-01-01 00:00:00 と 2023-12-31 00:00:00 の差分: 364 days, 0:00:00
日数の差分: 364
合計秒数の差分: 31449600.0

これは、timedelta が時間加算と 2 つの時点間の期間の計算の両方で使用される方法を示しています。これらは、多くの時間ベースのアプリケーションにとって基本的な操作です。

まとめ

この実験では、Python の datetime モジュールの基礎、すなわち datetimedatetime オブジェクトの作成方法を学びました。timedelta クラスを使用して期間を表す方法、および timedelta オブジェクトを datetime オブジェクトに加えて時間加算を行う方法を調べました。また、将来の日付を見つけることや、2 つの datetime オブジェクト間の差分を計算することなど、実用的な時間計算も実践しました。これらのスキルは、Python プログラムで時間関連の操作を行う上で不可欠です。