Pythonのtimeモジュール徹底解説!時間を扱う主要関数と使い方を実例付きで紹介
Pythonでは、標準ライブラリの「time」モジュールを使うことで、時刻情報の取得・表現・操作をさまざまな方法で行えます。Pythonにおいて日付・時刻・日時はすべてオブジェクトとして扱われるため、これらに対して何らかの操作を行う際には、文字列やタイムスタンプそのものではなく、オブジェクトを操作していることになります。
本記事では、時刻に関するさまざまな処理を可能にする「time」モジュールについて詳しく解説します。
EPOCH(エポック)とは
timeモジュールは「EPOCH(エポック)」という規約に従っています。エポックとは、時刻のカウント起点となる時点のことです。Unixシステムでは、エポックは1970年1月1日の午前0時に設定されており、2038年までの時刻を表現できるようになっています。
自分のシステム上のエポック時刻を確認するには、以下のコードを実行します。
>>> import time >>> 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)
Pythonにおける「ティック」とは?
ティック(tick)とは、秒を単位とした浮動小数点数で表される時間間隔のことです。また、夏時間(DST:Daylight Saving Time)が採用されている地域では、夏季に時計が1時間進み、秋季に元に戻るという扱いになります。
timeモジュールの主な関数
1. time.time() 関数
time()はtimeモジュールの中核となる関数です。エポックからの経過秒数を浮動小数点値として返します。
構文
time.time()
実際の動作を確認してみましょう。
import time
print("Number of seconds elapsed since the epoch are : ", time.time())
実行結果
Number of seconds elapsed since the epoch are : 1553262407.0398576
time.time()を使えば、2つの時点間の経過時間(ウォールクロック時間)を計測することもできます。
以下は経過時間を計測するプログラム例です。
import time
start = time.time()
print("Time elapsed on working...")
time.sleep(0.9)
end = time.time()
print("Time consumed in working: ",end - start)
実行結果
Time elapsed on working... Time consumed in working: 0.9219651222229004
2. time.clock() 関数
time.clock()関数はプロセッサ時間(CPU時間)を返す関数で、パフォーマンステストやベンチマークの目的で使われてきました。
構文
time.clock()
clock()関数はプログラムが実際に消費した時間を返し、time()よりも高精度な計測が可能でした。
補足:time.clock()はPython 3.3で非推奨となり、Python 3.8で削除されました。現在は用途に応じて、高精度な計測にはtime.perf_counter()、CPU時間の計測にはtime.process_time()を使用することが推奨されています。
両者の違いを確認するためのプログラム例を見てみましょう。
import time
template = 'time()# {:0.2f}, clock()# {:0.2f}'
print(template.format(time.time(), time.clock()))
for i in range(5, 0, -1):
print('---Sleeping for: ', i, 'sec.')
time.sleep(i)
print(template.format(time.time(), time.clock())
)
実行結果
time()# 1553263728.08, clock()# 0.00 ---Sleeping for: 5 sec. time()# 1553263733.14, clock()# 5.06 ---Sleeping for: 4 sec. time()# 1553263737.25, clock()# 9.17 ---Sleeping for: 3 sec. time()# 1553263740.30, clock()# 12.22 ---Sleeping for: 2 sec. time()# 1553263742.36, clock()# 14.28 ---Sleeping for: 1 sec. time()# 1553263743.42, clock()# 15.34
3. time.ctime() 関数
time.ctime()関数は、「エポックからの経過秒数」を入力として受け取り、ローカル時刻に基づいた人間が読める形式の文字列に変換します。引数を省略した場合は、現在の時刻を返します。
import time
print('The current local time is :', time.ctime())
newtime = time.time() + 60
print('60 secs from now :', time.ctime(newtime))
実行結果
The current local time is : Fri Mar 22 19:43:11 2019 60 secs from now : Fri Mar 22 19:44:11 2019
4. time.sleep() 関数
time.sleep()関数は、指定した秒数だけ現在のスレッドの実行を一時停止します。より正確な待機時間が必要な場合は、浮動小数点値を引数として渡しましょう。
sleep()は、ファイルのクローズ完了を待ちたい場合や、データベースへのコミットの完了を待機したい場合などに活用できます。
import time
# ctime()で現在時刻を表示
print ("Time starts from : ",end="")
print (time.ctime())
# sleep()で実行を一時停止
print ('Waiting for 5 sec.')
time.sleep(5)
# ctime()で現在時刻を再表示
print ("Time ends at : ",end="")
print (time.ctime())
実行結果
Time starts from : Fri Mar 22 20:00:00 2019 Waiting for 5 sec. Time ends at : Fri Mar 22 20:00:05 2019
5. time.struct_time クラス
time.struct_timeは、timeモジュールに存在する唯一のデータ構造です。名前付きタプル(named tuple)インターフェースを持っており、インデックスまたは属性名のどちらでもアクセスできます。
構文
time.struct_time
このクラスは、日付の特定のフィールドにアクセスしたい場合に便利です。localtime()やgmtime()などの関数は、struct_timeオブジェクトを返します。
import time
print(' Current local time:', time.ctime())
t = time.localtime()
print('Day of month:', t.tm_mday)
print('Day of week :', t.tm_wday)
print('Day of year :', t.tm_yday)
実行結果
Current local time: Fri Mar 22 20:10:25 2019 Day of month: 22 Day of week : 4 Day of year : 81
6. time.strftime() 関数
strftime()関数は、第2引数にタプルまたはstruct_timeを受け取り、第1引数で指定したフォーマットに従って文字列へ変換します。
構文
time.strftime()
strftime()の実装例を紹介します。
import time
now = time.localtime(time.time())
print("Current date time is: ",time.asctime(now))
print(time.strftime("%y/%m/%d %H:%M", now))
print(time.strftime("%a %b %d", now))
print(time.strftime("%c", now))
print(time.strftime("%I %p", now))
print(time.strftime("%Y-%m-%d %H:%M:%S %Z", now))
実行結果
Current date time is: Fri Mar 22 20:13:43 2019 19/03/22 20:13 Fri Mar 22 Fri Mar 22 20:13:43 2019 08 PM 2019-03-22 20:13:43 India Standard Time
Pythonでタイムゾーンを確認する方法
タイムゾーンに関する情報を取得できるプロパティは2つあります。
1. time.timezone
ローカル(非DST)タイムゾーンのUTCからのオフセットを返します。
>>> time.timezone -19800
2. time.tzname
ローカルの非DSTおよびDSTタイムゾーン名を含むタプルを返します。
>>> time.tzname
('India Standard Time', 'India Daylight Time')
まとめ
timeモジュールを使いこなせるようになれば、エポックからの経過秒数の取得、人間が読める形式への変換、処理の一時停止、日付フィールドへのアクセス、任意フォーマットへの変換など、時刻に関するあらゆる操作が可能になります。日常的なスクリプトからパフォーマンス計測まで幅広く活躍するモジュールなので、各関数の特徴と使い分けをしっかり押さえておきましょう。
-
Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説
本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス
-
Pythonのmathモジュール完全ガイド|定数・数値関数・べき乗・三角関数の使い方
Pythonのmathモジュールとは Pythonのmathモジュールは、数学計算のための関数や定数をまとめた標準ライブラリです。このモジュールの関数は整数型や浮動小数点型(実数)のオブジェクトを対象としており、複素数には対応していません。複素数を扱いたい場合は、代わりにcmathモジュールを使用します。 mathモジュールを利用するには、まずコード内でインポートします。 import math mathモジュールの主な定数 mathモジュールには、計算式の中でそのまま使える便利な定数が用意されています。 番号定数と説明 1pi円周率πの値を返します(3.141592…)。 2E自然対数