Next: Time Zone Rules, Previous: User Identification, Up: System Interface [Contents][Index]
このセクションではカレント時刻とタイムゾーンを決定する方法を説明します。
current-time
やfile-attributes
のような多くの関数は秒をカウントするLispタイムスタンプ(Lisp
timestamp)値をリターンします。この値は1970-01-01 00:00:00
UTCというエポック(epoch)からの経過秒数をカウントすることにより絶対時刻を表すことができます。
伝統的なLispタイムスタンプが整数のペアであったとしても、それらの形式は進化しており、プログラムは通常はカレントのデフォルト形式に依存するべきではありません。プログラムに特定のタイムスタンプ形式が必要なら、time-convert
関数を使用して必要とする形式に変換できます。Time Conversionを参照してください。
現在のところ3つのLispタイムスタンプ形式があり、それぞれが秒数を表します:
(ticks . hz)
(
hzは正)。これはticks/hz秒を表し、hzが1なら単なるticksと同時刻。hzにたいして一般的な値はナノ秒解像度クロック用の100000000027。
(high low micro pico)
(0≤low<65536、0≤micro<1000000、0≤pico<1000000)。これは次式を使用して秒数を表す:
high * 2**16 + low + micro * 10**-6 + pico *
10**-12。
あるケースにおいては、この関数はデフォルトでmicroおよびpicoを0に省略した2つ、または3つの要素のリストをリターンするかもしれない。現在のすべてのマシンではpicoは1000の倍数だが、より高精度のクロックが利用可能になったら変更されるかもしれない。
関数の引数( current-time-string
のtime引数)に、より一般的な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-time
やfloat-time
を使用して別の形式にtime値を変換できます。これらの関数については以降のセクションで説明します。
この関数はカレントの時刻と日付を可読形式の文字列でリターンする。この文字列の先頭部分には曜日、月、日付、時刻がこの順に含まれて、それらが可変長となることはない。これらのフィールドにたいして使用される文字数は常に同じとはいえ、年は正確に4桁とはかぎらず、いつかの将来に終端に追加情報が追加されるかもしれないので、current-time-string
の出力からフィールドを抽出するよりformat-time-string
を使うほうが通常は便利です。
引数timeが与えられたら、それはカレント時刻のかわりにフォーマットする時刻を指定する。オプション引数zoneのデフォルトはカレントのタイムゾーンルール。Time Zone Rulesを参照のこと。timeの範囲およびzoneの値はオペレーティングシステムが制限する。
(current-time-string) ⇒ "Fri Nov 1 15:59:49 2019"
この関数はカレント時刻をLispタイムスタンプとしてリターンする。Emacsの現在のリリースでタイムスタンプが(high
low micro
pico)
という形式だとしても、Emacsの将来バージョンで変更が予定されている。タイムスタンプを他形式に変換するにはtime-convert
関数を使用できる。Time Conversionを参照のこと。
この関数はエポックからの経過秒数を浮動小数点数としてリターンする。オプション引数time-valueが与えられた場合には、カレント時刻ではなく変換する時刻を指定する。
警告:
結果は浮動小数点数なので正確ではないかもしれない。正確なタイムスタンプが必要なら使用しないこと。たとえば典型的なシステムにおいては(float-time
'(1 . 10))
を‘0.1’と表示するが、これは1/10より若干大きい。
time-to-seconds
はこの関数のエイリアス。
現在のところhzは互換性に関する警告を回避するために、少なくとも65536である必要があります。以前のバージョンのEmacsは後方互換性の観点からそのようなタイムスタンプを異なるように扱うからです。これらの警告はEmacsの将来バージョンでは削除が計画されています。