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


38.7 時刻の変換

以下の関数はtime値(Time of Dayを参照)を暦情報に変換したり逆の変換を行います。

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

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

Function: decode-time &optional time zone

この関数はtime値を暦情報に変換する。timeを指定しなければカレント時刻をデコードする。同様にzoneのデフォルトはカレントのタイムゾーンルール。Time Zone Rulesを参照のこと。リターン値は以下のような9要素のリスト:

(seconds minutes hour day month year dow dst utcoff)

以下は各要素の意味:

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

utcoff

万国標準時からの秒数、すなわち東グリニッジの秒数を示す整数。

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

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

この関数はdecode-timeの逆バージョン。これは7アイテムの暦データを整数リストのtime値に変換する。引数の意味は上述decode-timeのテーブルを参照のこと。

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

オプション引数zoneのデフォルトは、カレントのタイムゾーンルール。Time Zone Rulesを参照のこと。通常のタイムゾーンルール値に加えて(decode-timeで得られるような)リスト、(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年以降から機能する。