Pythonで経過時間(差分)を取得する: 日時、時刻

269, 2021-06-14

目次

Pythonで経過時間(差分)を取得する

Pythonではライブラリを使うことで時間に関する処理を書くことができます。
特定の処理の経過時間を計測したい場合はtimeを使います。

結論から言うとtimeを使った経過時間の取得は↓のようにします。

import time


start = time.time()  # 開始時間を取得
time.sleep(3)  # 何らかの時間のかかる処理
end = time.time()  # 終了時間を取得
dif = end - start  # 差分を計算

print(dif)
# 3.0030386447906494

この記事では経過時間の取得について具体的に↓を見ていきます。

  • timeを使った時間の計測

  • datetimeを使った時間の計測

関連記事
Pythonのdatetimeの使い方: 現在時刻を得る、文字列を時刻に変換する

timeを使った時間の計測

timeはPythonの標準ライブラリで、時刻データを取り扱うモジュールです。

time.time()はエポックからの秒数を浮動小数点数で返す関数です。
エポックとは時刻の基点のことで、WindowsやLinuxによって違います。
UNIX系では1970年1月1日0時0分0秒がエポックです。

【絵】elapsedマン

エポックはtime.gmtime(0)で確認することができます。

print(time.gmtime(0))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

このエポックから現在までの経過時間を秒数で返すのがtime.time()です。

import time


tm = time.time()
print(tm)
# 1619613084.051934

このtime.time()を利用することで、特定の処理の前に時間を取得して、そして特定の処理の後にまた時間を取得し、それらの時間の差分を計算することで経過時間を取得できるというのがtime.time()を使った時間の計測です。

start = time.time()  # 開始時間を取得
time.sleep(3)  # 何か処理
end = time.time()  # 終了時間を取得
dif = end - start  # 差分を計算
print(dif)  # 3.0030694007873535

↑の場合、time.sleep(3)で3秒間仕事をさせています。
その前後のstartendに時間を保存します。
そしてそれらの時間を「経過時間 = 終了時間 - 開始時間」という 式で計算します。
その結果がdifになりますが、これが経過時間となります。
↑の場合は約3秒経過してるのがわかります。

datetimeを使った時間の計測

datetimeモジュールは日付と時間をあつかうPythonの標準ライブラリです。
このモジュールを使うと日付と時間に関する処理を書くことができます。

datetime.datetimeオブジェクトは日付と時間を両方扱えるオブジェクトです。

このdatetime.datetimeのクラスメソッドであるtoday()を使うと現在時刻を取得することができます。

from datetime import datetime


today = datetime.today()
print(type(today))
# <class 'datetime.datetime'>

print(today)
# 2021-04-28 00:00:00.000000

time.time()を使うように何らかの処理の前と後に現在時刻を取得しておき、それを差分として計算させれば経過時間がわかります。

from datetime import datetime
import time


start = datetime.today()  # 開始時刻を取得
time.sleep(3)  # 何らかの処理
end = datetime.today()  # 終了時刻を取得
dif = end - start  # 差分を計算
print(dif)
# 0:00:03.003057

datetimeオブジェクト同士を演算するとその結果はtimedeltaオブジェクトになります。

start = datetime.today()
time.sleep(3)
end = datetime.today()
dif = end - start
print(type(dif))
# <class 'datetime.timedelta'>

timedeltaオブジェクトの属性secondsにアクセスすると、経過時間秒数を取得することができます。

print(dif.seconds)
# 3

dateを使った時間の計測

datetimeモジュールのdateオブジェクトは日付を扱うオブジェクトです。
このdateオブジェクトでも差分を計算することができます。
dateオブジェクトのtoday()メソッドを使うと現在の日付を取得することができます。

from datetime import date


today = date.today()
print(type(today))
# <class 'datetime.date'>

print(today)
# 2021-04-28

datedatetimeオブジェクト同様に差分を計算することができます。

from datetime import date
import time


start = date.today()
time.sleep(3)
end = date.today()
dif = end - start
print(dif)
# 0:00:00

dateオブジェクト同士の演算もその結果はtimedeltaオブジェクトになります。

start = date.today()
time.sleep(3)
end = date.today()
dif = end - start
print(type(dif))
# <class 'datetime.timedelta'>

timedeltaオブジェクトのdaysにアクセスすると経過日数を取得することができます。

print(dif.days)
# 0

おわりに

今回はPythonで経過時間を取得する方法を見てみました。

何時間経ったかな?

100年

You died...