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


38.6 時刻の変換

以下の関数はtime値(前セクションで説明した2個から4個の整数リスト)を、暦情報に変換したり、逆変換を行います。

32ビットオペレーティングシステムの多くは、32ビット情報を含んだtime値に制限されます。これらのシステムは、通常は1901-12-13 20:45:52 UTCから2038-01-19 03:14:07 UTCまでの時刻だけを処理します。しかし64ビット、およびいくつかの32ビットオペレーティングシステムは、より大きなtime値をもち、より遠い過去や未来の時刻を表現できます。

時刻変換関数は、たとえグレゴリオ暦導入前の日付にたいしても常にグレゴリオ暦を使用します。年はB.C. 1年から年数を数えて伝統的なグレゴリオ年が行うように0年をスキップしません。たとえば年数-37はグレゴリオ年のB.C. 38年を表します。

Function: decode-time &optional time

この関数は、time値を暦情報に変換する。timeを指定しなければ、カレント時刻をデコードする。リターン値は、以下のような9要素のリストである:

(seconds minutes hour day month year dow dst zone)

以下は各要素の意味:

seconds

0から59までの整数で表した分を過ぎた時分秒の秒。いくつかのオペレーティングシステムでは閏秒にたいして60となる。

minutes

0から59までの整数で表した時を過ぎた時分秒の分。

hour

0から23までの整数で表した時分秒の時。

day

1から31までの整数で表した年月日の日。

month

1から12までの整数で表した年月日の月。

year

通常は1900より大きい整数で表した年月日の年。

dow

0から6までの整数で表した曜日であり0は日曜日を意味する。

dst

夏時間が有効ならt、それ以外はnil

zone

グリニッジ以東の秒数による、タイムゾーンを示す整数。

Common Lispに関する注意: Common Lispではdowzoneの意味が異なる。

Function: encode-time seconds minutes hour day month year &optional zone

この関数はdecode-timeの逆版である。これは7アイテムの暦データをtime値に変換する。引数の意味は、上述decode-timeのテーブルを参照のこと。

100未満の年が特別に扱われることはない。これに1900や2000を超える年を意味させたい場合には、encode-timeを呼び出す前に自身でこれらを修正しなければならない。

オプション引数zoneのデフォルトは、カレントのタイムゾーンと夏時間ルールである。指定する場合は(current-time-zoneで得られるような)リスト、環境変数TZの値のような文字列、tは万国標準時、(decode-timeで得られるような)整数のいずれかを指定できる。指定されたゾーンは夏時間による更なる変更を受けずに使用される。

encode-timeにたいして7個より多い引数を渡すと最初の6つはsecondsからyear、最後の引数がzoneとして使用されてその間の引数は無視される。これにより以下のようにdecode-timeがリターンしたリストの要素をencode-timeの引数として使用することが可能になる:

(apply 'encode-time (decode-time …))

secondsminuteshourdaymonthの引数に範囲外の値を使用することにより単純な日付計算ができる。たとえばdayが0なら与えられたmonthの前月末日になる。

オペレーティングシステムは可能なtime値の範囲に制限を設ける。範囲外の時刻のエンコードを試みると結果はエラーとなる。たとえばあるシステムでは1970年以前では機能せず、別のシステムではより以前の1901年以降から機能する。