Next: Timers, Previous: Time of Day, Up: 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日はその月のまえの日を意味する。
オペレーティングは可能な時刻の値の範囲を制限する。 その範囲を越える時刻を符号化しようとするとエラーになる。