Next: , Previous: , Up: オペレーティングシステムのインターフェース   [Contents][Index]


42.5 時刻

このセクションではカレント時刻とタイムゾーンを決定する方法を説明します。

current-timefile-attributesのような多くの関数は秒をカウントするLispタイムスタンプ(Lisp timestamp)値をリターンします。この値は1970-01-01 00:00:00 UTC(Coordinated Universal Time: 協定世界時)というエポック(epoch)からの経過秒数をカウントすることにより絶対時刻を表すことができます。通常これらのカウントは閏秒(leap seconds)を無視します。ただしGNUや一部のオペレーティングシステムでは閏秒をカウントするように構成できます。

伝統的なLispタイムスタンプが整数のペアであったとしても、それらの形式は進化しており、プログラムは通常はカレントのデフォルト形式に依存するべきではありません。プログラムに特定のタイムスタンプ形式が必要なら、time-convert関数を使用して必要とする形式に変換できます。時刻の変換を参照してください。

現在のところ3つのLispタイムスタンプ形式があり、それぞれが秒数を表します:

関数の引数(format-time-stringtime引数)には、より一般的なtime値(time value)のフォーマット(Lispタイムスタンプ、カレント時刻にたいするnil、秒にたいする有限浮動小数点数、欠落要素を0に切り詰めたタイムスタンプリスト(high low micro) )が許されています。

time値は暦形式や他形式に相互に変換できます。これらの変換のいくつかは利用可能なtime値範囲を制限するオペレーティングシステム関数に依存しており、その制限を超えると‘"Specified time is not representable"’のようなエラーをシグナルします。たとえばあるシステムではエポック以前のタイムスタンプ、あるいは遠い将来の年をサポートしないかもしれません。format-time-stringを使用して可読性のある文字列、time-convertを使用してLispタイムスタンプ、decode-timefloat-timeを使用して別の形式にtime値を変換できます。これらの関数については以降のセクションで説明します。

Function: current-time-string &optional time zone

この関数はカレントの時刻と日付を可読形式の文字列でリターンする。この文字列の先頭部分には曜日、月、日付、時刻がこの順に含まれて、それらが可変長となることはない。これらのフィールドにたいして使用される文字数は常に同じとはいえ、年は正確に4桁とはかぎらず、いつかの将来に終端に追加情報が追加されるかもしれないので、current-time-stringの出力からフィールドを抽出するよりformat-time-stringを使うほうが通常は便利です。

引数timeが与えられたら、それはカレント時刻のかわりにフォーマットする時刻を指定する。オプション引数zoneのデフォルトはカレントのタイムゾーンルール。タイムゾーンのルールを参照のこと。timeの範囲およびzoneの値はオペレーティングシステムが制限する。

(current-time-string)
     ⇒ "Fri Nov  1 15:59:49 2019"
Variable: current-time-list

これは移行支援用のブーリーン変数である。tならcurrent-timeや関連する関数は(high low micro pico))、それ以外なら(ticks . hz)という形式を用いてタイムスタンプをリターンする。現在のところ以前のバージョンのEmacsの挙動と互換性をとるために、この変数のデフォルトはtになっている。この変数のデフォルトはEmacsの将来のバージョンではnilとなり、その後いくつかのバージョンを経た後に削除されるので、開発者はこの変数をnilにセットしてタイムスタンプ関連のコードをテストするようお勧めする。

Function: current-time

この関数はカレント時刻をLispタイムスタンプとしてリターンする。current-time-listnilならタイムスタンプの形式は(ticks . hz) (ticksはクロックチックカウント、hzは1秒当たりのクロックチック)、それ以外の場合にはタイムスタンプは(high low usec psec)という形式のリスト。current-time-listの値に関わらず特定の形式を得るには(time-convert nil t)(time-convert nil 'list)を使うことができる。時刻の変換を参照のこと。

Function: float-time &optional time

この関数はエポックからの経過秒数を浮動小数点数としてリターンする。オプション引数time-valueが与えられた場合には、カレント時刻ではなく変換する時刻を指定する。

警告: 結果は浮動小数点数なので正確ではないかもしれない。正確なタイムスタンプが必要なら使用しないこと。たとえば典型的なシステムにおいては(float-time '(1 . 10))を‘0.1’と表示するが、これは1/10より若干大きい。

time-to-secondsはこの関数のエイリアス。

Function: current-cpu-time

カレントCPU時間を解像度とともにリターンする。値は(CPU-TICKS . TICKS-PER-SEC)のようなペアーとしてリターンされる。CPU-TICKSカウンターはラップアラウンド(wrap around: 最後に達したら最初に戻る)するかもしれないので、時間が経過し過ぎると値の比較は無意味になるだろう。