doc/ja_JP.eucJP/man/man3/time2posix.3
Kazuo Horikawa cb5d1a9147 Replace jpman project specific RCS keyword with $FreeBSD.
jpman project specific RCS keyword (jpman %Id) is obsolete,
after manual entries are stored in freefall CVS repository.
This old Id is useless and more worse it confuses users and bug reporters.
So, this old Id is removed.

Submitted by:jpman project <man-jp@jp.FreeBSD.org>
2001-05-14 01:10:24 +00:00

90 lines
2.9 KiB
Groff

.\" $FreeBSD$
.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