This section is based on catpages contributed by Mainichi Communications, Inc. Translated by: MYCOM team Converted by: Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG> Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
89 lines
2.9 KiB
Groff
89 lines
2.9 KiB
Groff
.Dd May 1, 1996
|
|
.Dt TIME2POSIX 3
|
|
.Os
|
|
.Sh 名称
|
|
.Nm time2posix ,
|
|
.Nm posix2time
|
|
.Nd 基準時点からの秒数を変換
|
|
.Sh 書式
|
|
.Fd #include <time.h>
|
|
.Ft time_t
|
|
.Fn time2posix "const time_t *t"
|
|
.Ft time_t
|
|
.Fn posix2time "const time_t *t"
|
|
.Sh 解説
|
|
.St -p1003.1-88
|
|
は、 536457599 という値を "1986 年 12 月 31 日 23 : 59 : 59 "
|
|
に対応させるように規定しています。これは、実際上 POSIX の time_t が
|
|
うるう秒を含むことはできず、従ってシステム時間はうるう秒が起きるたびに
|
|
調整する必要があることを意味しています。
|
|
.Pp
|
|
しかしながら、時間パッケージのうるう秒サポートが有効に設定されている場
|
|
合は、このような調整は必要がなく、time_t 値はうるう秒が
|
|
起きても正しく ( 真の「…からの秒数」で ) 進みます。
|
|
これは、これらの値が基準時点以後に挿入された
|
|
正味のうるう秒だけ POSIX によって要求される値と異なることを意味します。
|
|
.Pp
|
|
通常は、タイプ time_t は ( ほとんどの場合 ) 不透明です
|
|
\(em すなわち time_t 値は
|
|
.Xr time 2 ,
|
|
.Xr localtime 3 ,
|
|
.Xr mktime 3 ,
|
|
.Xr difftime 3
|
|
などの関数からのみ取得し、またそれらの関数のみに渡すように
|
|
考えられているので、このことは問題になりません。
|
|
しかしながら、プログラムによっては time_t 値を与えられた日付 / 時間から
|
|
直接計算する数式が与えられ、同じ関係を前提条件にしているものがあります。
|
|
このような関係を使ってtime_tの作成 / 分析を行っているプログラムでは、通
|
|
常はうるう秒の間隔を正しく処理できません。
|
|
.Pp
|
|
.Fn time2posix
|
|
および
|
|
.Fn posix2time
|
|
関数は、ローカルの time_t 値とそれに相当する POSIX 等価の値との間で
|
|
変換を行って、この time_t のミスマッチに対応するために
|
|
用意されたものです。これは、うるう秒の挿入や
|
|
削除に応じて POSIX システムに起きたタイムベース変更の回数を数える
|
|
ことにより行います。これらの変換値は、
|
|
古いアプリケーションを訂正する代りに、あるいは POSIX 準拠システムと
|
|
通信するときに用いることができます。
|
|
.Pp
|
|
.Fn time2posix
|
|
関数は単一の値を持ちます。すなわち、すべてのローカルの time_t は、
|
|
単一の POSIX time_t に対応します。
|
|
.Fn posix2time
|
|
関数の動作は、それほど行儀よくありません。
|
|
正のうるう秒に出会うとその結果は 1 つにはならず、
|
|
また負のうるう秒に対しては対応する time_t が存在しないために
|
|
それに近い値が返されます。これらの 2 つの例は、POSIX による
|
|
表現の欠陥度を示すよい指標であるといえます。
|
|
.Pp
|
|
次の表は、 1993 年 6 月末に挿入されたうるう秒に対して、 time_t と
|
|
その POSIX 表現への変換値、およびそれを再変換して戻した値との関係を示します。
|
|
.ta \w'93/06/30 'u +\w'23:59:59 'u +\w'A+0 'u +\w'X=time2posix(T) 'u
|
|
DATE TIME T X=time2posix(T) posix2time(X)
|
|
93/06/30 23:59:59 A+0 B+0 A+0
|
|
93/06/30 23:59:60 A+1 B+1 A+1 or A+2
|
|
93/07/01 00:00:00 A+2 B+1 A+1 or A+2
|
|
93/07/01 00:00:01 A+3 B+2 A+3
|
|
|
|
うるう秒削除は次のようになります。
|
|
|
|
DATE TIME T X=time2posix(T) posix2time(X)
|
|
??/06/30 23:59:58 A+0 B+0 A+0
|
|
??/07/01 00:00:00 A+1 B+2 A+1
|
|
??/07/01 00:00:01 A+2 B+3 A+2
|
|
.Pp
|
|
[注: posix2time(B+1) => A+0 or A+1]
|
|
.Pp
|
|
うるう秒サポートが有効になっていない場合は、
|
|
ローカルの time_t と POSIX の time_t は等価となり、
|
|
.Fn time2posix
|
|
および
|
|
.Fn posix2time
|
|
関数はともに恒等関数となります。
|
|
.Sh 参照
|
|
.Xr difftime 3 ,
|
|
.Xr localtime 3 ,
|
|
.Xr mktime 3 ,
|
|
.Xr time 3
|