Next: Time Parsing, Previous: Time of Day, Up: System Interface [Contents][Index]
以下の関数は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年を表します。
この関数は、time値を暦情報に変換する。timeを指定しなければ、カレント時刻をデコードする。リターン値は、以下のような9要素のリストである:
(seconds minutes hour day month year dow dst zone)
以下は各要素の意味:
0から59までの整数で表した分を過ぎた時分秒の秒。いくつかのオペレーティングシステムでは閏秒にたいして60となる。
0から59までの整数で表した時を過ぎた時分秒の分。
0から23までの整数で表した時分秒の時。
1から31までの整数で表した年月日の日。
1から12までの整数で表した年月日の月。
通常は1900より大きい整数で表した年月日の年。
0から6までの整数で表した曜日であり0は日曜日を意味する。
夏時間が有効ならt
、それ以外はnil
。
グリニッジ以東の秒数による、タイムゾーンを示す整数。
Common Lispに関する注意: Common Lispではdowと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 …))
seconds、minutes、hour、day、monthの引数に範囲外の値を使用することにより単純な日付計算ができる。たとえばdayが0なら与えられたmonthの前月末日になる。
オペレーティングシステムは可能なtime値の範囲に制限を設ける。範囲外の時刻のエンコードを試みると結果はエラーとなる。たとえばあるシステムでは1970年以前では機能せず、別のシステムではより以前の1901年以降から機能する。