srfi.19
- 時間のデータ型と手続き ¶このSRFIは、時間と日付に関する様々な表現と、それらの間の変換メソッドを提供します。
Gaucheでは、timeオブジェクトは<time>
クラスとして組み込みで
サポートされています(時間参照)。dateオブジェクトは以下で説明する
<date>
クラスとしてサポートされます。
• 時間のタイプ: | ||
• 時間に関する問い合わせ: | ||
• 時間に関する手続き: | ||
• 日付: | ||
• 日付の読み書き: |
時間のタイプはシンボルで表現されます。 このモジュールでは以下の定数が自分の名前に束縛された形で提供されています。
[SRFI-19]{srfi.19
}
UTC timeです。Gaucheの組み込みのcurrent-time
は常にこのタイプの時間を
返します (時間参照)。
[SRFI-19]{srfi.19
}
International Atomic Time。この時間は閏秒による調整を受けないため、
UTCより若干大きな値を取ります。
[SRFI-19]{srfi.19
}
実装依存の、単調増加する時間。Gaucheの実装ではこれはtime-tai
と同じです。
[SRFI-19]{srfi.19
}
二つの絶対的な時点の間の期間。
[SRFI-19]{srfi.19
}
現在のプロセスのCPU時間。
Gaucheは、POSIX time(3)コールが返すユーザ時間とシステム時間の合計からこの値を
計算します。
[SRFI-19]{srfi.19
}
現在のスレッドのCPU時間。
現在の実装ではこれはtime-process
と同じです。
[SRFI-19]{srfi.19
}
Gauche組み込みのcurrent-time
(時間参照)を拡張して、
必要な時間のタイプを省略可能な引数time-typeで指定できるようにしています。
可能なtime-typeの値は時間のタイプで説明されているものです。
[SRFI-19]{srfi.19
}
現在の日付を<date>
クラスのインスタンスとして返します(日付参照)。
tz-offsetが与えられた場合、それがUTCからのオフセットを表す秒数として
使われます。tz-offsetが与えられなかった場合はローカルタイムゾーンで
表現された日付が返されます。
[SRFI-19]{srfi.19
}
現在のユリウス日(Julian day)を返します。Julian dayは
-4714-11-24T12:00:00Z (November 24, -4714 at noon, UTC) からの日数を
実数で表現したものです。
[SRFI-19]{srfi.19
}
現在の修正ユリウス日(Modified julian day)を返します。Modified julian dayは
1858-11-17T00:00:00Z (November 17, 1858 at midnight, UTC)
からの日数を実数で表現したものです。
[SRFI-19]{srfi.19
}
時間タイプtypeを計測する時計の粒度を、ナノセコンド単位の正整数として返します。
typeが省略された場合はtime-utc
になります。
註: 現在の実装では、これは正確な粒度そのものではなく、 正確な粒度と等しいかより大きい値を返します。
[SRFI-19]{srfi.19
}
与えられた初期値を持つ<time>
クラスのインスタンスを返します。
(make <time> :type type :second seconds :nanosecond nanoseconds)
と等価です。
[SRFI-19]{srfi.19
}
<time>
オブジェクトのスロットのアクセサです。
[SRFI-19]{srfi.19
}
与えられたtimeと同じ内容の新しい<time>
オブジェクトを返します。
[SRFI-19]{srfi.19
}
二つの時間を比較します。時間のタイプは一致していなければなりません。
[SRFI-19]{srfi.19
}
二つの時間の差をtime-duration
タイプの時間として返します。
二つの時間のタイプは一致していなければなりません。
Time-difference!
は結果を格納するためにtime0を変更します。
[SRFI-19]{srfi.19
}
time-durationをtime0に加算、またはtime0から減算します。
返される時間のタイプはtime0と同じです。time-durationのタイプは
time-duration
でなければなりません。
add-duration!
とsubtract-duration!
は結果を格納するのに
time0を再利用します。
時間のseconds+
も参照してください。
{srfi.19
}
日付を表現します。
<date>
: nanosecond ¶日付のナノ秒部分、0 から 999,999,999 までの整数です。
<date>
: second ¶日付の秒部分、0 から 60 までの整数です。(60 は閏秒)
<date>
: minute ¶日付の分部分、0 から 59 までの整数です。
<date>
: hour ¶日付の時部分、0 から 23 までの整数です。
<date>
: day ¶日付の日部分、0 から 31 日までの整数です。実際の上限は年と月によって決定 されます。(註: 1 は朔日(ついたち)、0 は仕様では認められていますが、 なぜなのかはわかりません。)
<date>
: month ¶日付の月部分、1 から 12 までの整数です。1 は一月、2 は二月、以下同様です。
(註: これは POSIX の <sys-tm>
の命名法とは異ります。)
<date>
: year ¶日付の年部分です。
<date>
: zone-offset ¶このタイムゾーンが GMT より何秒東にあるかを示す整数です。
[SRFI-19]{srfi.19
}
与えられた値から <date>
オブジェクトを作成します。
註: この手続きは与えられた値が正しい範囲であるかどうかをチェックしません。
[SRFI-19]{srfi.19
}
obj が <date>
オブジェクトである場合にかぎり真を返します。
[SRFI-19]{srfi.19
}
アクセサです。
[SRFI-19]{srfi.19
}
それぞれ、一年の何日目(一月一日が 1)か、何曜日(日曜日が 0、月曜日が 1
など)か、一年のうち何週目(一年の最初の週が一週間に満たない場合はその
週は無視)かを計算します。
[SRFI-19]{srfi.19
}
日付から様々な様式の日付/時間に変換します。
[SRFI-19]{srfi.19
}
ユリウス日からから様々な様式の日付/時間に変換します。
[SRFI-19]{srfi.19
}
修正ユリウス日から様々な様式の日付/時間に変換します。
[SRFI-19]{srfi.19
}
time-monotonic形式から様々な様式の日付/時間に変換します。
[SRFI-19]{srfi.19
}
time-tai形式から様々な様式の日付/時間に変換します。
[SRFI-19]{srfi.19
}
UTC 形式から様々な様式の日付/時間に変換します。
[SRFI-19+]{srfi.19
}
<date>
オブジェクトを文字列に変換します。書式は
format-stringで指定します。format-stringが省略された場合に
は"~c"
が指定されたものとします。
書式文字列は出力にコピーされます。ただし、~
で始まる並びの部分は
以下の規則にしたがって書き換えられます。
~~
文字~
そのもの。
~a
ロケールによる曜日省略形(Sun...Sat)
~A
ロケールによる曜日完全形(Sunday...Saturday)
~b
ロケールによる月省略形(Jan...Dec)
~B
ロケールによる月完全形(January...December)
~c
ロケールによる日付時刻(例えば "Fri Jul 14 20:28:42-0400 2000"
)
~d
月日にち、0を補填(01...31)
~D
日付(mm/dd/yy)
~e
月日にち、空白補填( 1...31)
~f
秒 + 小数秒、小数点はロケールによるセパレータ(たとえば、5.2)
~h
~b
に同じ
~H
時、0を補填、24時制(00...23)
~I
時、0を補填、12時制(01...12)
~j
年日にち、0補填(001...366)
~k
時、空白補填、24時制( 0...23)
~l
時、空白補填、12時制( 1...12)
~m
月、0補填、(01...12)
~M
分、0補填、(00...59)
~n
改行
~N
ナノ秒、0補填
~p
ロケールによるAM、PM
~r
時刻、12時制、"~I:~M:~S ~p"
と同じ
~s
エポックからの経過秒(UTC)
~S
秒、0補填(00...60)
~t
水平タブ
~T
時刻、24時制、"~H:~M:~S"
と同じ
~U
年経過週、週は日曜はじまり(00...53)
~V
ISO8601形式の年経過週、週は月曜はじまり。年の最初の木曜日を含む週が01となり、 それ以前の週にはみ出た部分は前年の52または53週となる (01...53)
~w
曜日を表す数字、日曜が0 (0...6)
~W
年経過週、週は月曜日はじまり(00...52)
~x
ロケールによる日付、例えば "07/31/00"
~X
ロケールによる時刻、24時制、例えば "06:51:44"
~y
西暦の下2桁(00...99)
~Y
西暦
~z
RFC-2822スタイルのタイムゾーン
~1
ISO-8601 の「年-月-日」形式。例えば "2001-02-03"
~2
ISO-8601 の「時-分-秒タイムゾーン」形式。例えば "04:56:12-1000"
~3
ISO-8601 の「時:分:秒」形式。例えば "04:56:12"
~4
ISO-8601 の「西暦-月-日T時:分:秒タイムゾーン」形式。
例えば "2001-02-03T04:56:12-1000"
~5
ISO-8601 の「西暦-月-日T時:分:秒」形式。
例えば "2001-02-03T04:56:12"
注意:現時点でGaucheはロケールの設定には従っておらず、常にロケールが
"C" に設定されているものとしてフォーマットします。これについては将来変
更する可能性がありますので、現在の振舞いを前提として、たとえば、
~a
が常に"Sun".."Sat"のようにフォーマットされることを前提にプロ
グラムしてはいけません。
いまのところプロセスのロケールを設定する標準的な方法がないので、
"C"ロケール形式を取得できるかどうかを確かめるポータブルな方法がありま
せん。とはいえ、Gaucheでは SRFI-19の拡張として"C"ロケールであることを
確認する方法を提供しています。@
を ~
とディレクティブ文
字の間に挿入し、~@a
のようにします。
[SRFI-19]{srfi.19
}