【Python】timeモジュールの使い方を初心者向けに解説|時間計測・日付管理の基礎
はじめに
Pythonでプログラミングを始めると、必ずといっていいほど時間や日付の扱いが必要になります。
ファイルにタイムスタンプを記録したり、処理の実行時間を計測したりする場面は日常的にあるでしょう。
こうした状況で役立つのが、timeモジュール です。
timeモジュールを使うと、シンプルな関数で「現在時刻の取得」や「一時的に処理を止めるスリープ機能」などが行えます。
また、同じくPythonで日付や時間に関連する作業をする場合、datetimeモジュール と組み合わせて使われることも多いです。
しかし、初心者の方にとってはtimeモジュールとdatetimeモジュールの違いがはっきりしなかったり、どの関数を使えば何ができるのか分からなかったりと、混乱することがあるかもしれません。
この記事では、timeモジュールの基本的な使い方や実務での活用シーンを、できるだけわかりやすくまとめていきます。
この記事を読むとわかること
- timeモジュールの基本的な概要
- timeモジュールの主な関数の使い方とコード例
- datetimeモジュールとの違いと併用方法の概要
- 実務での具体的な利用シーンと注意点
- 時間や日付の取り扱いをシンプルに行うためのヒント
Python timeモジュールとは?
timeモジュールは、Pythonが標準で提供している「時間情報」を扱うためのモジュールです。
このモジュールが提供する関数を使うと、プログラム内で現在時刻や経過時間を測定できるようになります。
具体例として、time.time()
を呼び出すと「UNIX時間」(エポックとも呼ばれ、1970年1月1日からの経過秒数)を取得します。
これは数値として返ってくるため、そのまま計算に使ったり、別の形式に変換したりすることで活用可能です。
また、time.sleep()
のように、指定した秒数だけ処理を止める(スリープする)関数も用意されています。
このように、シンプルな構文で時間制御ができるので、小さなスクリプトから大規模なアプリケーションまで幅広い場面で役立ちます。
一方、日付の操作(たとえば「◯年◯月◯日」のような形式やタイムゾーンの管理)にはdatetimeモジュールがメインで使われることが多いですが、timeモジュールにも文字列フォーマットに関する機能があるので覚えておくと便利です。
timeモジュールでよく使われる主な関数
Pythonのtimeモジュールにはいろいろな関数がありますが、初心者の方が特におさえておきたい関数は以下の通りです。
time.time()
UNIX時間を浮動小数点数として取得できます。小数点以下はマイクロ秒単位で表現されることがあります。
time.sleep(seconds)
指定した秒数だけプログラムの実行を停止します。秒数は少数でも指定が可能です。
time.localtime([sec])
UNIX時間を人間が読みやすい「年・月・日・時・分・秒」などに変換した結果を表す構造体を取得します。secを省略すると現在時刻が変換対象になります。
time.strftime(format, tuple_time)
timeモジュールの構造体やtime.localtime()
から得た情報を元に、任意のフォーマットで文字列を生成します。
time.strptime(string, format)
文字列を解析して、timeモジュールが扱う構造体(time.struct_time)に変換します。
これらの関数を使いこなせるようになると、時間の取得からスリープ、文字列形式の変換まで、一通りのことがスムーズにこなせるようになります。
datetimeモジュールとの違い
timeモジュールに慣れた頃に気になるのが、同じく時間や日付を取り扱うdatetimeモジュール との違いです。
結論からいえば、timeモジュールは「UNIX時間やスリープなど、比較的簡単な操作」が中心なのに対し、datetimeモジュールは「年月日やタイムゾーンなどを扱う高度な操作」に向いています。
たとえば、「◯年◯月◯日 12:00:00」のように、具体的な年月日が必要な処理ならdatetimeモジュールが便利でしょう。
一方で、処理時間の計測やちょっとした待ち時間を入れるだけなら、timeモジュールで十分です。
実務では「時間間隔の測定にはtimeモジュールを使い、フォーマットや時刻の加減算にはdatetimeモジュールを使う」といったように、両者を組み合わせる場面がよくあります。
time.time()でUNIX時間を取得する方法
まず、現在の時刻を数値(UNIX時間)として取得したい場合、time.time()
が役立ちます。
戻り値は1970年1月1日からの経過秒数です。この数値が大きくなるほど時刻は先になります。
import time current_unix = time.time() print("現在のUNIX時間:", current_unix)
ここで得られるUNIX時間は、プログラムが動いているコンピュータの内部時計を元に計算されます。
この数値を使えば、「処理の開始時刻と終了時刻を比較して実行時間を計測する」といった場面が簡単に実装できるでしょう。
time.sleep()を使ったウェイト処理
「一定時間だけプログラムを止めたい」というケースでは、time.sleep()
がシンプルで便利です。
たとえば、複数の処理を順番に実行する際に、外部サーバーのレスポンスを待つ時間を意図的に数秒空けたい場合などに利用できます。
import time print("処理を開始します。") time.sleep(3) # 3秒間停止 print("3秒待機しました。次の処理を開始します。")
指定した秒数だけプログラムが停止し、休止後に次の行へ進みます。
秒数は整数だけでなく、time.sleep(0.5)
のように小数点付きも指定可能です。
time.strptime()とtime.strftime()で文字列変換
timeモジュールには、文字列から日時情報を解析したり、逆に日時情報を文字列に変換するための関数があります。
これらを使うと、ログファイルに記録された文字列の日付をPythonで読み取り、さらに別の形式で出力するといったことが簡単に行えるでしょう。
time.strptime() 文字列を日時情報に変換
たとえば、"2025/02/16 13:20:00" のような文字列があるとします。
これをPython内部で扱うtimeモジュールの構造体に変換してみましょう。
import time date_str = "2025/02/16 13:20:00" parsed_time = time.strptime(date_str, "%Y/%m/%d %H:%M:%S") print(parsed_time)
このコードは、文字列を解析して年・月・日・時・分・秒などを格納するtime.struct_time
というオブジェクトを作成します。
フォーマット指定である%Y/%m/%d %H:%M:%S
の部分を変更すれば、文字列の形式に合わせた解析が可能です。
time.strftime() 日時情報を文字列に変換
一方で、構造体などからフォーマットを指定して文字列に変換するときにはtime.strftime()
を使います。
import time # 現在時刻を構造体として取得 current_struct = time.localtime() formatted_str = time.strftime("%Y-%m-%d %H:%M:%S", current_struct) print("現在の時刻は:", formatted_str)
ここでは、time.localtime()
で得た構造体をもとに YYYY-MM-DD HH:MM:SS
という形式の文字列を生成しています。
フォーマット文字はさまざまあり、月を略称で表示する%b
なども指定可能なので、必要に応じて切り替えられます。
time.localtime()とtime.gmtime()の違い
時刻の変換を行う関数として、localtime() と gmtime() が存在します。
time.localtime()
は、実行環境の「ローカルタイム」に合わせて変換を行います。
一方、time.gmtime()
は協定世界時(UTC)を基準にした世界標準時に合わせて変換します。
この違いはタイムゾーンを扱う上で重要です。
ローカルタイムを使いたい場合はlocaltime()
を、世界標準時が必要な場合はgmtime()
を選ぶと整理できます。
日本国内のシステムで実行するなら、通常はlocaltime()
が多いですが、サーバー環境によってはUTCを基準に運用している場合もあります。
time.zoneやtime.tznameを使ってタイムゾーンを調べる
Pythonのtimeモジュールには、タイムゾーンに関する情報を取得できる変数も含まれています。
たとえば、time.timezone
は標準時との 時差 (秒単位) を表す数値を示します。
そして time.tzname
は、標準時と夏時間の文字列表現を格納したタプルです。
こうした情報を活用すれば、実行環境での時差や夏時間設定がどのようになっているのかを確認できます。
ただし、本格的に複雑なタイムゾーンを扱う場合はdatetimeモジュールのサブクラス(timezone)や、より専門的なライブラリを使用するケースも多いです。
timeモジュールだけでは限界があるため、「時差をさっと確認する用途に使う」くらいが実務では多いかもしれません。
実務での活用シーン:処理時間の計測
timeモジュールを仕事などで使う具体例として、処理時間の計測 が挙げられます。
アプリケーションやスクリプトが「実行開始からどれくらいかかったのか」を把握することは、性能向上やリソース管理のうえで重要です。
以下のように、time.time()
を2回呼び出して実行前後の差をとることで、計測が可能です。
import time start = time.time() # ここで何か重たい処理を実行する time.sleep(2) # 仮に2秒かかる処理とする end = time.time() print("処理にかかった時間:", end - start, "秒")
実行時間に関する情報が分かれば、どの部分を最適化すべきかを判断する材料となります。
数秒や数十秒単位で計測するなら、このやり方が手軽でわかりやすいです。
実務での活用シーン:定期実行スクリプトとtime.sleep()
プログラムを決まった時間間隔で実行する「定期実行スクリプト」でもtime.sleep()
はよく利用されます。
たとえば、あるAPIからデータを一定の時間おきに取得してファイルに保存する場合、以下のようなパターンが考えられます。
import time while True: # ここでデータ取得などの処理を行う # 取得したデータをファイルに書き込むなど # 10秒おきに取得したい場合 time.sleep(10)
このように無限ループ内でsleep()
を挟むと、プログラムが「指定秒数待機→処理→待機→処理」を繰り返す流れになります。
ただし、実際の開発現場では、一定時間ごとに処理を行う場合にcronなどのOS標準の仕組みを使うことも多いです。
それでもスクリプト単体で完結させる必要があるなら、time.sleep()
は簡単で扱いやすい手段でしょう。
実務での活用シーン:ログへの時刻記録
アプリケーションでエラーが起きた場合や、ユーザーの操作を記録したい場合に「ログ」に時刻を残すことがあります。
こうしたログには現在の時刻や日付を一緒に書き込みたいことが多いです。
timeモジュールを使えば、time.strftime()
などでログに見やすい時刻を付与できます。
import time def log_event(event_message): now_struct = time.localtime() timestamp = time.strftime("%Y-%m-%d %H:%M:%S", now_struct) log_line = f"[{timestamp}] {event_message}" print(log_line) # ここでファイルに書き込むなどの処理を追加してもOK log_event("ユーザーがログインしました。")
このように、時間情報を文字列で簡単に整形できるため、記録を残す用途でも便利です。
フォーマットをカスタマイズすれば、秒以外にミリ秒や曜日も含めるなど、自由度が高いのが魅力です。
timeモジュールを使う上での注意点
timeモジュールは便利ですが、いくつか注意すべき点があります。
まず、実行環境の時刻設定によっては、取得できる時刻が実際よりもずれている可能性があります。
これはサーバーやPCのシステム時計のずれに依存するため、定期的に時刻が正しく同期されているか確認すると安心です。
また、ミリ秒以下の正確な計測を要するような場面(たとえば高精度な計測器を制御する場合など)では、timeモジュールの単純な計測では誤差が大きくなることがあります。
より高精度な計測が必要なら、同じPython標準ライブラリ内のtime.perf_counter()
といった関数を検討してみることが多いです。
時刻にまつわるバグは、タイムゾーンや夏時間、システム時計のずれなど、思わぬ要因で発生することがあります。想定外の不具合を防ぐためにも、ローカル時刻とUTC時刻をしっかり使い分ける意識が必要です。
timeモジュールとdatetimeモジュールを連携させるケース
datetimeモジュールで処理した日付と、timeモジュールで取得したUNIX時間を相互変換したいケースは少なくありません。
たとえば、ある日時をUNIX時間に変換し、その差をとって期間を計算する、という流れです。
datetimeモジュールには、datetime.datetime.timestamp()
や datetime.datetime.fromtimestamp()
など、UNIX時間との行き来をするためのメソッドがあります。
したがって、timeモジュールと組み合わせることで、時間系の処理を幅広くカバーできます。
具体的には、ログの文字列からtime.strptime()
で構造体に変換した情報をdatetime
型へ変換し、そこからさらにタイムゾーンを設定するなどの使い方が考えられます。
このような組み合わせは、実務でしばしば行われるため、頭の片隅に置いておくと後々便利です。
timeモジュールで発生しやすいエラー例
初心者の方がtimeモジュールを使うときに発生しやすいエラーとして、フォーマット指定子が正しくない問題が挙げられます。
例えば、time.strptime("2025-13-01", "%Y-%m-%d")
のように、存在しない月(13月)をパースしようとするとエラーが出るでしょう。
あるいは、time.strptime("2025/02/16", "%Y-%m-%d")
のように「/」で区切られた文字列に対して「-」を指定してしまうと、解析に失敗してエラーとなります。
このようなフォーマットの食い違いは、実務でもログや外部システムから受け取った文字列の形式が想定外だったケースで起こりがちです。
エラーが出たら一度フォーマット指定子と実際の文字列形式を照合するのが早道でしょう。
timeモジュールのデバッグでよくある対処
timeモジュールを使った処理でなかなか期待通りの時刻が取れないときは、まずprint
で都度確認してみるのも手です。
たとえば、time.time()
の値や time.localtime()
の戻り値を頻繁に出力することで、どの部分で想定と違う挙動が起きているかを確かめることができます。
プログラム内の時刻取得部分を限定的にテストするのもわかりやすい対処です。
可能であれば関数化してテストし、時間系のバグを早めに発見できるようにすると良いでしょう。
まとめ
ここまで、Pythonのtimeモジュール について、基本的な関数や実務の活用シーンなどを紹介してきました。
時間や日付の操作はプログラム開発において非常に重要なテーマのひとつです。
timeモジュールは比較的シンプルな操作に向いているため、まずは現在時刻の取得や処理の待機などでどんどん使ってみると理解が深まるでしょう。
一方で、より複雑な日付計算やタイムゾーン管理にはdatetimeモジュールを使い分けることが多いです。
実務ではこの2つのモジュールを組み合わせながら、コードをすっきり保つのが一般的と言えます。
timeモジュールの基本を押さえれば、ログ記録やタスクの定期実行、処理時間の計測など幅広い用途で役立ちます。
初心者でも手軽に試せるので、ぜひPythonでの開発や学習の中で活用してみてください。