PyTime C API
************

Added in version 3.13.

クロック C API は、システムクロックへのアクセスを提供します。これは
Python の "time" モジュールに似ています。

"datetime" モジュールに関連する C API については、DateTime オブジェク
ト を参照してください。


型
==

type PyTime_t

   符号付き 64 ビット整数で表す、ナノ秒単位のタイムスタンプまたは時間
   間隔です。

   タイムスタンプの基準時点は、使用するクロックによって異なります。 例
   えば "PyTime_Time()" は UNIX エポックを基準としたタイムスタンプを返
   します。

   サポートする範囲はおよそ [-292.3 年; +292.3 年] です。 Unix エポッ
   ク (1970 年 1 月 1 日) を基準とした日付の範囲は、およそ
   [1677-09-21; 2262-04-11] です。 正確な限界値は定数として公開されて
   います。

PyTime_t PyTime_MIN

   "PyTime_t" の最小値。

PyTime_t PyTime_MAX

   "PyTime_t" の最大値。


クロック関数
============

以下の関数は PyTime_t へのポインタを受け取り、特定のクロックの値をその
参照先に設定します。 各クロックの詳細は、対応する Python 関数のドキュ
メントを参照してください。

成功した場合は "0" を返し、失敗した場合は例外を設定して "-1" を返しま
す。

整数オーバーフローが発生した場合は "PyExc_OverflowError" 例外を設定し
、"*result" に "[PyTime_MIN; PyTime_MAX]" の範囲内に制限した値を設定し
ます。 (現在のシステムでは、整数オーバーフローはシステム時刻の誤設定に
よって発生する可能性が高いです。)

ほかの C API と同様に (特記のない限り)、これらの関数を呼び出すには *ス
レッド状態がアタッチされている* 必要があります。

int PyTime_Monotonic(PyTime_t *result)

   単調クロックを読み取ります。 このクロックに関する重要な詳細は
   "time.monotonic()" を参照してください。

int PyTime_PerfCounter(PyTime_t *result)

   パフォーマンスカウンタを読み取ります。 このクロックに関する重要な詳
   細は "time.perf_counter()" を参照してください。

int PyTime_Time(PyTime_t *result)

   実時間 (wall clock time) を読み取ります。 このクロックに関する重要
   な詳細は "time.time()" を参照してください。


Raw クロック関数
================

クロック関数と同様ですが、エラー時に例外を設定せず、呼び出し元に *アタ
ッチされたスレッド状態* がなくても使えます。

成功した場合は "0" を返します。

失敗した場合は "*result" を "0" に設定し、例外を設定 *せずに* "-1" を
返します。 エラーの原因を取得するには、*スレッド状態* を *アタッチ* し
て、通常の ("Raw" でない) 関数を呼び出してください。 "Raw" 関数が失敗
した後で、通常の関数が成功することもあります。

int PyTime_MonotonicRaw(PyTime_t *result)

   "PyTime_Monotonic()" と同様ですが、エラー時に例外を設定せず、*アタ
   ッチされたスレッド状態* も必要としません。

int PyTime_PerfCounterRaw(PyTime_t *result)

   "PyTime_PerfCounter()" と同様ですが、エラー時に例外を設定せず、*ア
   タッチされたスレッド状態* も必要としません。

int PyTime_TimeRaw(PyTime_t *result)

   "PyTime_Time()" と同様ですが、エラー時に例外を設定せず、*アタッチさ
   れたスレッド状態* も必要としません。


変換関数
========

double PyTime_AsSecondsDouble(PyTime_t t)

   タイムスタンプを、C の double 型の秒数に変換します。

   この関数は失敗しませんが、大きな値に対する double の精度には限りが
   あることに注意してください。
