次: Timers, 前: Time of Day, 上: System Interface
これらの関数は、時刻の値(2つか3つの整数から成るリスト)を
文字列や日時情報に変換します。
日時情報を時刻の値に変換する関数もあります。
時刻の値は、関数current-time
(see Time of Day)や
file-attributes
(see File Attributes)で得られます。
多くのオペレーティングシステムでは、時刻の値を32ビットに制限しています。 これらのシステムでは、典型的には協定世界時1901年12月13日20:45:52から 2038年1月19日03:14:07までしか表現できません。 しかし、より大きな時刻の値を扱い、 より広い範囲の過去から未来を表現できるシステムもあります。
時刻変換関数は、グレゴリオ暦を導入するまえであっても つねにグレゴリオ暦を使います。 紀元前1年からの経過年数を数え、通常のグレゴリオ暦のように0年を飛ばしません。 たとえば、−37年は、グレゴリオ暦紀元前38年を表します。
この関数は、timeをformat-stringに従って文字列に変換する。 引数format-stringには、時刻のさまざまな部分で置き換えられる `%'列を含んでよい。 `%'列の意味を以下に示す。
- `%a'
- 曜日の省略名を表す。
- `%A'
- 曜日の(省略しない)名称を表す。
- `%b'
- 月の省略名を表す。
- `%B'
- 月の(省略しない)名称を表す。
- `%c'
- `%x %X'の同義語。
- `%C'
- これにはローケル固有の意味がある。 デフォルトのローケル(`C')では、`%A, %B %e, %Y'と等価。
- `%d'
- ゼロでパディングした月内の日。
- `%D'
- `%m/%d/%y'の同義語。
- `%e'
- 空白でパディングした月内の日。
- `%h'
- `%b'の同義語。
- `%H'
- 時(00-23)を表す。
- `%I'
- 時(00-12)を表す。
- `%j'
- 年内の日(001-366)を表す。
- `%k'
- 空白でパディングした時(0-23)を表す。
- `%l'
- 空白でパディングした時(0-12)を表す。
- `%m'
- 月(01-12)を表す。
- `%M'
- 分(00-59)を表す。
- `%n'
- 改行を表す。
- `%p'
- `AM'か`PM'の適切なほうを表す。
- `%r'
- `%I:%M:%S %p'の同義語。
- `%R'
- `%H:%M'の同義語。
- `%S'
- 秒(00-60)を表す。
- `%t'
- タブ文字を表す。
- `%T'
- `%H:%M:%S'の同義語。
- `%U'
- 日曜日を週の始まりと仮定した年内の週(01-52)を表す。
- `%w'
- 数字で表した曜日(0-6)。 日曜日を0とする。
- `%W'
- 月曜日を週の始まりと仮定した年内の週(01-52)を表す。
- `%x'
- これにはローケル固有の意味がある。 デフォルトのローケル(`C')では、`%D'と等価。
- `%X'
- これにはローケル固有の意味がある。 デフォルトのローケル(`C')では、`%T'と等価。
- `%y'
- 年の下2桁(00-99)を表す。
- `%Y'
- 100年単位の年を表す。
- `%Z'
- 時刻帯の省略名を表す。
これらの`%'列には、桁数やパディングの種類も指定できる。
printf
と同様に動作し、 `%'列のあいだに桁数を数字で指定する。 桁数を`0'で始めるとゼロでパディングすることを意味する。 桁数を`_'で始めると空白でパディングすることを意味する。たとえば、`%S'は分内の秒数を指定し、 `%03S'はゼロでパディングして3桁にすることを意味し、 `%_3S'は空白でパディングして3桁にすることを意味する。 `%S'は普通はパディングして2桁にするため、 `%3S'だけであるとゼロでパディングする。
この関数は、時刻の値を日時情報に変換する。 戻り値は、つぎの9要素のリストである。
(seconds minutes hour day month year dow dst zone)各要素の意味はつぎのとおりである。
- sec
- 0から59の整数で表した分内の秒数。
- minute
- 0から59の整数で表した時内の分数。
- hour
- 0から23の整数で表した日内の時。
- day
- 1から31の整数で表した月内の日。
- month
- 1から12の整数で表した年内の月。
- year
- 年。 典型的には1900より大きい。
- dow
- 日曜日を0とした0から6の整数で表した曜日。
- dst
- 夏時間制が有効であると
t
、さもなければnil
。- zone
- グリニッジから東周りではかった時刻帯を表す秒数。
Common Lispに関した注意: Common Lispでは、dowとzoneの意味が異なる。
この関数は
decode-time
の逆である。 7項目から成る日時情報を時刻の値に変換する。 引数の意味については、上記decode-time
の一覧を参照。100未満の年は普通の年として扱う。 それらを1900年代として扱いたい場合には、
encode-time
を呼び出すまえに修正しておくこと。省略可能な引数zoneのデフォルトは、 現在の時刻帯とその夏時間制の規則である。 指定する場合には、(
current-time-zone
で得られるような)リストであるか、 環境変数TZ
と同じ形式の文字列であるか、 (decode-time
で得られるような)整数であること。 指定した時刻帯は、夏時間の補正をせずに使われる。
encode-time
に7引数より多く渡すと、 始めの6つをsecondsからyearまでに、 最後の引数をzoneに使い、そのあいだの引数は無視する。 この機能は、decode-time
が返したリストの要素を つぎのようにしてencode-time
の引数に使うことを可能にする。(apply 'encode-time (decode-time ...))引数sec、minute、hour、day、monthの 値が範囲外になるようにすると単純な日時演算を行える。 たとえば、0日はその月のまえの日を意味する。
オペレーティングは可能な時刻の値の範囲を制限する。 その範囲を越える時刻を符号化しようとするとエラーになる。