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分前の時刻を計算しています。このように、hours、minutes、daysなどの引数を組み合わせることで、柔軟に日時計算が行えます。
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」で過去、「日時 − 日時」で差分というように、直感的に扱えるのが魅力です。日常的なプログラムで日時を扱う場面は多いため、ぜひマスターしておきましょう。
-
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
-
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