Next: , Previous: , Up: System Interface   [Contents][Index]


41.5 時刻

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

current-timefile-attributesのような多くの関数は秒をカウントするLispタイムスタンプ(Lisp timestamp)値をリターンします。この値は1970-01-01 00:00:00 UTCというエポック(epoch)からの経過秒数をカウントすることにより絶対時刻を表すことができます。

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

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

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

time値は暦形式や他形式に相互に変換できます。これらの変換のいくつかは利用可能なtime値範囲を制限するオペレーティングシステム関数に依存しており、その制限を超えると‘"Specified time is not representable"’のようなエラーをシグナルします。たとえばあるシステムでは1970や1901より前の年、遠い将来の年をサポートしないかもしれません。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 Rulesを参照のこと。timeの範囲およびzoneの値はオペレーティングシステムが制限する。

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

この関数はカレント時刻をLispタイムスタンプとしてリターンする。Emacsの現在のリリースでタイムスタンプが(high low micro pico)という形式だとしても、Emacsの将来バージョンで変更が予定されている。タイムスタンプを他形式に変換するにはtime-convert関数を使用できる。Time Conversionを参照のこと。

Function: float-time &optional time

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

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

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


Footnotes

(27)

現在のところhzは互換性に関する警告を回避するために、少なくとも65536である必要があります。以前のバージョンのEmacsは後方互換性の観点からそのようなタイムスタンプを異なるように扱うからです。これらの警告はEmacsの将来バージョンでは削除が計画されています。