Pythonで日時の差を求める方法|timedeltaオブジェクトの使い方を徹底解説
Pythonでは、timedeltaオブジェクトを使うことで、日付や時刻に関する計算を非常に簡単に行えます。ある日時に加算や減算を行いたい場合は、まずdatetime.datetime()で日時オブジェクトを生成し、そこにdatetime.timedelta()インスタンスを足したり引いたりします。timedeltaオブジェクトは「期間」、つまり2つの日付や時刻の差分を表すものです。
timedeltaコンストラクタは、次のような関数シグネチャを持っています。
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
注意:すべての引数は省略可能で、デフォルト値は0です。引数にはint型やfloat型などの数値を指定でき、正負どちらの値も使用できます。さらに詳しい仕様については、公式ドキュメント https://docs.python.org/3/library/datetime.html#timedelta-objects を参照してください。
例:timedeltaを使った日時の加算・減算
以下は、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分前の時刻を求めています。このように、timedeltaを使えば日・秒・ミリ秒・分・時間・週など、さまざまな単位で柔軟に日時を操作できます。
なお、datetime.time()オブジェクトに対してはtimedeltaによる演算がサポートされていない点に注意してください。既存のdatetime.time()オブジェクトにオフセットを適用したい場合は、datetime.datetime.combine()でdatetime.datetime()インスタンスを組み立て、計算を行った後、.time()メソッドで再び時刻部分を「取り出す」という手順が必要です。
また、2つのdatetimeオブジェクト同士を減算すると、その結果としてtimedeltaオブジェクトが返されます。これを利用することで、2つの日時間の正確な差を求めることができます。
例: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クラスであることが確認できます。このように、Pythonのtimedeltaをマスターすれば、日付・時刻の差分計算や加減算を直感的かつ確実に扱えるようになります。スケジュール管理やログ解析など、日時処理を伴うプログラムにおいて非常に役立つ機能なので、ぜひ活用してみてください。
-
Pythonで整数の桁数を求める方法をわかりやすく解説
この記事では、ユーザーから入力された整数の桁数を求めるPythonプログラムを紹介します。初心者にもわかりやすいように、アルゴリズムの考え方からサンプルコード、実行結果まで順を追って解説していきます。 実行例 入力:123 → 出力:3入力:1987 → 出力:4 アルゴリズム 桁数を求める基本的な流れは以下の通りです。 ユーザーから整数値を入力として受け取ります。 数値を10で割り、その商を整数型(int)に変換します。 商が0でなければ、桁数のカウントを1つ増やします。 商が0になった時点でカウントを終了します。 処理を終了し、桁数を出力します。 サンプルコード x = int(
-
Pythonのscikit-learnを使って画像の輪郭を検出する方法
scikit-learn(通称:sklearn)は、機械学習アルゴリズムを実装するために使用されるPythonのライブラリです。オープンソースとして公開されているため、無料で利用できます。このライブラリは、NumPy・SciPy・Matplotlibという3つのライブラリを基盤として構築されています。画像から輪郭を抽出する際には、「マーチングスクエア法(marching squares)」と呼ばれる手法が用いられます。具体的には、skimageライブラリのmeasureモジュールに含まれる「find_contours」関数を使用します。この関数では、配列内の値が線形補間されるため、出力画像にお