Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで日付・時刻の算術演算を行う方法|timedeltaオブジェクトの使い方を解説

Pythonでは、timedeltaオブジェクトを使うことで、日付や時刻の計算を非常に簡単に行えます。ある日時に時間を加算・減算したい場合は、まずdatetime.datetime()オブジェクトを作成し、そこにdatetime.timedelta()インスタンスを足したり引いたりします。timedeltaオブジェクトは「期間(duration)」、すなわち2つの日付や時刻の間の差を表すオブジェクトです。

timedeltaコンストラクタの書式

timedeltaコンストラクタの関数シグネチャは以下のとおりです。

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

注意:すべての引数は省略可能で、デフォルト値は0です。引数にはint型やfloat型の数値が使用でき、正の値も負の値も指定できます。たとえば「3日前」「2週間後」といった計算も自由自在です。

より詳しい仕様については、公式ドキュメントをご参照ください。
https://docs.python.org/ja/3/library/datetime.html#timedelta-objects

実際の使用例:過去・未来の日時を計算する

以下は、timedeltaオブジェクトを使って日時を操作する基本的な例です。

import datetime

old_time = datetime.datetime.now()
print(old_time)

new_time = old_time - datetime.timedelta(hours=2, minutes=10)
print(new_time)

出力結果

2018-01-04 11:09:00.694602
2018-01-04 08:59:00.694602

このコードでは、現在時刻から2時間10分前の時刻を計算しています。このように、hoursminutesdaysなどの引数を組み合わせることで、柔軟に日時計算が行えます。

datetime.timeオブジェクトにおける注意点

timedelta()による算術演算は、datetime.time()オブジェクトではサポートされていません。既存のdatetime.time()オブジェクトに対してオフセットを適用したい場合は、次の手順で処理します。

1. datetime.datetime.combine()を使ってdatetime.datetimeインスタンスを作成する
2. 計算を行う
3. .time()メソッドで時刻部分を再度取り出す

2つのdatetimeの差分を求める

2つのdatetimeオブジェクト同士を減算すると、その結果としてtimedeltaオブジェクトが返されます。これを利用すれば、2つの日時の正確な差(経過時間)を簡単に取得できます。

t1 = datetime.datetime.now()
t2 = datetime.datetime.now()

print(t1 - t2)
print(type(t1 - t2))

出力結果

-1 day, 23:59:56.653627
<class 'datetime.timedelta'>

出力を見ると、返されたオブジェクトの型がdatetime.timedeltaであることが確認できます。マイナスの値になる場合は「-1 day」のように表現される点にも注目してください。

まとめ

Pythonで日付・時刻の加減算を行う際は、timedeltaオブジェクトが非常に便利です。「日時 + timedelta」で未来、「日時 − timedelta」で過去、「日時 − 日時」で差分というように、直感的に扱えるのが魅力です。日常的なプログラムで日時を扱う場面は多いため、ぜひマスターしておきましょう。

  1. Pythonで日付から1日を引く方法【timedeltaの使い方】

    Pythonで日付から1日を引く(前日の日付を取得する)には、datetimeモジュールに含まれるtimedeltaオブジェクトを使用します。手順はシンプルで、まず引きたい時間の長さを指定してtimedeltaオブジェクトを作成し、それを現在の日付から減算するだけです。サンプルコードfrom datetime import datetime from datetime import timedelta today = datetime.today() yesterday = today - timedelta(days=1) print(today) print() print(yesterd

  2. Pythonで文字列から日付を抽出・解析する方法

    文字列から日付を抽出するには、まずその文字列内で日付がどのような形式(フォーマット)で表現されているかを把握しておく必要があります。基本的なアプローチとしては、正規表現(reモジュール)で日付部分を取り出し、datetime.datetime.strptime() で解析(パース)するという流れになります。例えば、文字列中に「YYYY-MM-DD」形式の日付が含まれている場合、以下のコードで抽出と解析ができます。コード例import re import datetime s = I have a meeting on 2018-12-10 in New York match = re.sea