時計管理機能では、 システム内部で保持している基準時間であるシステム時間の取出し / 設定、 およびカレンダー日付時刻との変換機能を提供している。
システム時間はグリニッチ標準時 GMT (Greenwich Mean Time) の 1985年1月1日 00:00 からの秒数で表わされた32ビットの値であり、 ファイルの生成 / 更新 / アクセス日時等のシステム内部の時間表現として使用される。
システム時間に対して、 マシンが実際に存在する地域の時間をローカル時間と呼ぶ。 時計管理機能ではシステム時間とローカル時間との時差を保持し、 ローカル時間での日付時刻の取出し / 設定機能も提供している。
システム時間とローカル時間の関係は、 以下に示す時間補正データとして定義される。
typedef struct { W adjust; /* システム時間との時差(秒) */ W dst_flg; /* DST の適用タイプ */ W dst_adj; /* DST 調整時間(分) */ } TIMEZONE;
adjust
はローカル時間とシステム時間 ( GMT )
との時差であり、グリニッチから西方向への秒単位で表現される、
- (12 × 60 × 60) 〜 + (12 × 60 × 60) の範囲の値である。
dst_flg
はサマータイム
( Daylight Saving Time, DST )
の適用タイプを示し 0 は適用しないことを示す。
0 以外の値は適用することを示すが、
その意味は時計管理機能では関知せず、
単に 0 か 0 でないかの判断のみを行なっている。
dst_adj
は DST による時間の調整時間 ( 分 )
を示す - (12×60) 〜 + (12×60)
の値である。
時計管理機能では DST が適用されるか否かの判断は行なわず、
システムプログラムが DST が実際に適用される期間の開始時に、
dst_adj
を適当な値に設定し、
DST が適用される期間の終了時に、dst_adj
を 0
に設定することを想定している。
時間補正データにより、ローカル時間は以下の式で定義されることになる。
ローカル時間(秒) = システム時間(秒) - adjust + (dst_flg ? (dst_adj×60): 0)
なお、時間の設定はユーザレベル0のプロセス以外から行なうことは禁止されている。
また、時計管理機能では、 以下に示す構造体で定義されるカレンダー日付時刻をサポートしており、 システム時間との変換機能が提供されている。
typedef struct { W d_year; /* 1990年からのオフセット(85〜) */ W d_month; /* 月 ( 1 〜 12, 0) */ W d_day; /* 日 ( 1 〜 31 ) */ W d_hour; /* 時 ( 0 〜 23 ) */ W d_min; /* 分 ( 0 〜 59 ) */ W d_sec; /* 秒 ( 0 〜 59 ) */ W d_week; /* 週 ( 1 〜 54 ) */ W d_wday; /* 曜日 ( 0 〜 6, 0が日曜) */ W d_days; /* 日 ( 1 〜 366 ) */ } DATE_TIM;
d_week
は、
その年の1月1日の週を1とした場合の週の数を意味し、
d_days
は、
その年の1月1日を1とした場合の日数を意味する。
また、d_month = 0
は、
特殊な意味として使用される。
時計管理システムコールはすべて WORD
型の関数値をとり、
何らかのエラーがあった場合は「負」のエラーコードが戻る。
正常終了時には「0」が戻る。
typedef struct { W adjust; /* システム時間との時差(秒) */ W dst_flg; /* DSTの適用タイプ */ W dst_adj; /* DST調整時間(分) */ } TIMEZONE;
typedef struct { W d_year; /* 1900年からのオフセット(85〜) */ W d_month; /* 月 ( 1 〜 12, 0) */ W d_day; /* 日 ( 1 〜 31 ) */ W d_hour; /* 時 ( 0 〜 23 ) */ W d_min; /* 分 ( 0 〜 59 ) */ W d_sec; /* 秒 ( 0 〜 59 ) */ W d_week; /* 週 ( 1 〜 54 ) */ W d_wday; /* 曜日 ( 0 〜 6, 0が日曜) */ W d_days; /* 日 ( 1 〜 366 ) */ } DATE_TIM;
|
ERR get_tim(STIME* time, TIMEZONE* tz)
STIME* time システム時間の格納領域 NULL 格納しない TIMEZONE* tz 時間補正データの格納領域 NULL 格納しない
=0 正常 <0 エラー(エラーコード)
現在のシステム時間、および時間補正データを取り出す。
ER_ADR : アドレス(time,tz)のアクセスは許されていない。
|
ERR set_tim(STIME time, TIMEZONE* tz)
STIME time 設定するシステム時間 ≦0 設定しない TIMEZONE* tz 設定する時間補正データ NULL 設定しない
= 0 正常 < 0 エラー(エラーコード)
現在のシステム時間、および時間補正データ設定する。
本システムコールの実行はユーザレベル 0 のプロセスのみ許可される。
ER_ACCES : レベル 0 のユーザでない。 ER_ADR : アドレス(tz)のアクセスは許されていない。 ER_PAR : パラメータが不正である(tz の内容が範囲外)。
|
ERR get_tod(DATE_TIM* dt, STIME time, Bool local)
DATE_TIM* dt 変換した日時の格納領域 STIME time 変換するシステム時間 ≦ 0 現在のシステム時間を変換 Bool local ローカル時間指定 = 0 GMT 時間 dt には時間補正を行わない結果を戻す。 ≠ 0 ローカル時間 dt には時間補正を行った結果を戻す。
=0 正常 <0 エラー(エラーコード)
指定したシステム時間または現在のシステム時間をカレンダー日付時刻に変換する。
ER_ADR : アドレス(data_tim)のアクセスは許されていない。
|
ERR set_tod(DATE_TIM* dt, STIME* time, Bool local)
DATE_TIM* dt 設定 / 変換する日時 STIME* time 変換したシステム時間の格納領域 NULL 現在のシステム時間として設定する (ユーザレベル 0 のプロセスのみ許可) Bool local ローカル時間指定 = 0 GMT 時間 dt は時間補正を行わない日時とみなす。 ≠ 0 ローカル時間 dt は時間補正を行った日時とみなす。
=0 正常 <0 エラー(エラーコード)
指定したカレンダー日付時刻をシステム時間に変換する。
指定した日時の内容のうち、d_week
( 週 ),
d_wday
( 曜日 ) は無視される。
d_days
( 日数 ) の値は
d_month = 0
のときのみ有効であり、
d_month ≠0
のときは無視される。
ER_ACCES : レベル 0 のユーザでない(time=NULLの時)。 ER_ADR : アドレス(tz)のアクセスは許されていない。 ER_PAR : パラメータが不正である(dat_tim の内容が範囲外)。