For Development HEAD DRAFTSearch (procedure/syntax/module):

11.7 srfi.19 - 時間のデータ型と手続き

Module: srfi.19

このSRFIは、時間と日付に関する様々な表現と、それらの間の変換メソッドを提供します。

Gaucheでは、timeオブジェクトは<time>クラスとして組み込みで サポートされています(時間参照)。dateオブジェクトは以下で説明する <date>クラスとしてサポートされます。


11.7.1 時間のタイプ

時間のタイプはシンボルで表現されます。 このモジュールでは以下の定数が自分の名前に束縛された形で提供されています。

Constant: time-utc

[SRFI-19]{srfi.19} UTC timeです。Gaucheの組み込みのcurrent-timeは常にこのタイプの時間を 返します (時間参照)。

Constant: time-tai

[SRFI-19]{srfi.19} International Atomic Time。この時間は閏秒による調整を受けないため、 UTCより若干大きな値を取ります。

Constant: time-monotonic

[SRFI-19]{srfi.19} 実装依存の、単調増加する時間。Gaucheの実装ではこれはtime-taiと同じです。

Constant: time-duration

[SRFI-19]{srfi.19} 二つの絶対的な時点の間の期間。

Constant: time-process

[SRFI-19]{srfi.19} 現在のプロセスのCPU時間。 Gaucheは、POSIX time(3)コールが返すユーザ時間とシステム時間の合計からこの値を 計算します。

Constant: time-thread

[SRFI-19]{srfi.19} 現在のスレッドのCPU時間。 現在の実装ではこれはtime-processと同じです。


11.7.2 時間に関する問い合わせ

Function: current-time :optional time-type

[SRFI-19]{srfi.19} Gauche組み込みのcurrent-time (時間参照)を拡張して、 必要な時間のタイプを省略可能な引数time-typeで指定できるようにしています。 可能なtime-typeの値は時間のタイプで説明されているものです。

Function: current-date :optional tz-offset

[SRFI-19]{srfi.19} 現在の日付を<date>クラスのインスタンスとして返します(日付参照)。 tz-offsetが与えられた場合、それがUTCからのオフセットを表す秒数として 使われます。tz-offsetが与えられなかった場合はローカルタイムゾーンで 表現された日付が返されます。

Function: current-julian-day

[SRFI-19]{srfi.19} 現在のユリウス日(Julian day)を返します。Julian dayは -4714-11-24T12:00:00Z (November 24, -4714 at noon, UTC) からの日数を 実数で表現したものです。

Function: current-modified-julian-day

[SRFI-19]{srfi.19} 現在の修正ユリウス日(Modified julian day)を返します。Modified julian dayは 1858-11-17T00:00:00Z (November 17, 1858 at midnight, UTC) からの日数を実数で表現したものです。

Function: time-resolution :optional type

[SRFI-19]{srfi.19} 時間タイプtypeを計測する時計の粒度を、ナノセコンド単位の正整数として返します。 typeが省略された場合はtime-utcになります。

註: 現在の実装では、これは正確な粒度そのものではなく、 正確な粒度と等しいかより大きい値を返します。


11.7.3 時間に関する手続き

Function: make-time type nanoseconds seconds

[SRFI-19]{srfi.19} 与えられた初期値を持つ<time>クラスのインスタンスを返します。 (make <time> :type type :second seconds :nanosecond nanoseconds) と等価です。

Function: time-type time
Function: time-second time
Function: time-nanosecond time
Function: set-time-type! time type
Function: set-time-second! time second
Function: set-time-nanosecond! time nanosecond

[SRFI-19]{srfi.19} <time>オブジェクトのスロットのアクセサです。

Function: copy-time time

[SRFI-19]{srfi.19} 与えられたtimeと同じ内容の新しい<time>オブジェクトを返します。

Function: time=? time0 time1
Function: time<? time0 time1
Function: time<=? time0 time1
Function: time>? time0 time1
Function: time>=? time0 time1

[SRFI-19]{srfi.19} 二つの時間を比較します。時間のタイプは一致していなければなりません。

Function: time-difference time0 time1
Function: time-difference! time0 time1

[SRFI-19]{srfi.19} 二つの時間の差をtime-durationタイプの時間として返します。 二つの時間のタイプは一致していなければなりません。 Time-difference!は結果を格納するためにtime0を変更します。

Function: add-duration time0 time-duration
Function: add-duration! time0 time-duration
Function: subtract-duration time0 time-duration
Function: subtract-duration! time0 time-duration

[SRFI-19]{srfi.19} time-durationtime0に加算、またはtime0から減算します。 返される時間のタイプはtime0と同じです。time-durationのタイプは time-durationでなければなりません。 add-duration!subtract-duration!は結果を格納するのに time0を再利用します。

時間seconds+も参照してください。


11.7.4 日付

Class: <date>

{srfi.19} 日付を表現します。

Instance Variable of <date>: nanosecond

日付のナノ秒部分、0 から 999,999,999 までの整数です。

Instance Variable of <date>: second

日付の秒部分、0 から 60 までの整数です。(60 は閏秒)

Instance Variable of <date>: minute

日付の分部分、0 から 59 までの整数です。

Instance Variable of <date>: hour

日付の時部分、0 から 23 までの整数です。

Instance Variable of <date>: day

日付の日部分、0 から 31 日までの整数です。実際の上限は年と月によって決定 されます。(註: 1 は朔日(ついたち)、0 は仕様では認められていますが、 なぜなのかはわかりません。)

Instance Variable of <date>: month

日付の月部分、1 から 12 までの整数です。1 は一月、2 は二月、以下同様です。 (註: これは POSIX の <sys-tm> の命名法とは異ります。)

Instance Variable of <date>: year

日付の年部分です。

Instance Variable of <date>: zone-offset

このタイムゾーンが GMT より何秒東にあるかを示す整数です。

Function: make-date nanosecond second minute hour day month year zone-offset

[SRFI-19]{srfi.19} 与えられた値から <date> オブジェクトを作成します。 註: この手続きは与えられた値が正しい範囲であるかどうかをチェックしません。

Function: date? obj

[SRFI-19]{srfi.19} obj<date> オブジェクトである場合にかぎり真を返します。

Function: date-nanosecond date
Function: date-second date
Function: date-minute date
Function: date-hour date
Function: date-day date
Function: date-month date
Function: date-year date
Function: date-zone-offset date

[SRFI-19]{srfi.19} アクセサです。

Function: date-year-day date
Function: date-week-day date
Function: date-week-number date day-of-week-starting-week

[SRFI-19]{srfi.19} それぞれ、一年の何日目(一月一日が 1)か、何曜日(日曜日が 0、月曜日が 1 など)か、一年のうち何週目(一年の最初の週が一週間に満たない場合はその 週は無視)かを計算します。

Function: date->julian-day date
Function: date->modified-julian-day date
Function: date->time-monotonic date
Function: date->time-tai date
Function: date->time-utc date

[SRFI-19]{srfi.19} 日付から様々な様式の日付/時間に変換します。

Function: julian-day->date jd :optional tz-offset
Function: julian-day->time-monotonic jd
Function: julian-day->time-tai jd
Function: julian-day->time-utc jd

[SRFI-19]{srfi.19} ユリウス日からから様々な様式の日付/時間に変換します。

Function: modified-julian-day->date jd :optional tz-offset
Function: modified-julian-day->time-monotonic jd
Function: modified-julian-day->time-tai jd
Function: modified-julian-day->time-utc jd

[SRFI-19]{srfi.19} 修正ユリウス日から様々な様式の日付/時間に変換します。

Function: time-monotonic->date time :optional tz-offset
Function: time-monotonic->julian-day time
Function: time-monotonic->modified-julian-day time
Function: time-monotonic->time-tai time
Function: time-monotonic->time-tai! time
Function: time-monotonic->time-utc time
Function: time-monotonic->time-utc! time

[SRFI-19]{srfi.19} time-monotonic形式から様々な様式の日付/時間に変換します。

Function: time-tai->date time :optional tz-offset
Function: time-tai->julian-day time
Function: time-tai->modified-julian-day time
Function: time-tai->time-monotonic time
Function: time-tai->time-monotonic! time
Function: time-tai->time-utc time
Function: time-tai->time-utc! time

[SRFI-19]{srfi.19} time-tai形式から様々な様式の日付/時間に変換します。

Function: time-utc->date time :optional tz-offset
Function: time-utc->julian-day time
Function: time-utc->modified-julian-day time
Function: time-utc->time-monotonic time
Function: time-utc->time-monotonic! time
Function: time-utc->time-tai time
Function: time-utc->time-tai! time

[SRFI-19]{srfi.19} UTC 形式から様々な様式の日付/時間に変換します。


11.7.5 日付の読み書き

Function: date->string date :optional format-string

[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 のようにします。

Function: string->date string template-string

[SRFI-19]{srfi.19}



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT