TIME2POSIX(3) FreeBSD ライブラリ関数マニュアル TIME2POSIX(3)
名称
time2posix, posix2time − 基準時点からの秒数を変換 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <time.h> time_t |
time2posix(const time_t *t); time_t |
posix2time(const time_t *t); |
解説 |
IEEE Std 1003.1-1988 (‘‘POSIX.1’’) は、536457599 という time_t 値を "1986 年 12 月 31 日 23:59:59" に対応させるように規定しています。これは、実際上 POSIX の time_t がうるう秒を含むことはできず、従ってシステム時間はうるう 秒が起きるたびに調整する必要があることを意味しています。 しかしながら、時間パッケージのうるう秒サポートが有効に設定されている場合 は、このような調整は必要がなく、time_t 値はうるう秒が起きても正しく (真の 「からの秒数」で) 進みます。これは、これらの値が基準時点以後に挿入された 正味のうるう秒だけ POSIX によって要求される値と異なることを意味します。 通常は、タイプ time_t は (ほとんどの場合) 不透明なので — すなわち time_t 値は time(3), localtime(3), mktime(3), difftime(3) などの関数からのみ取得 し、またそれらの関数のみに渡すように考えられているので — このことは問題に なりません。しかしながら、 IEEE Std 1003.1-1988 (‘‘POSIX.1’’) は、日付/時 間から time_t 値を直接計算する数式を与えており、プログラムによってはこの 関係を前提条件にしているものがあります。通常、この関係を使って time_t の 作成/分析を行っているプログラムでは、うるう秒をまたがる間隔を正しく処理で きません。 time2posix() および posix2time() 関数は、ローカルの time_t 値とそれに相当 する POSIX 等価の値との間で変換を行って、この time_t のミスマッチに対応す るために用意されたものです。これは、うるう秒の挿入や削除に応じて POSIX シ ステムに起きたタイムベース変更の回数を数えることにより行います。これらの 変換値は、古いアプリケーションを訂正する代りに、あるいは POSIX 準拠システ ムと通信するときに用いることができます。 time2posix() 関数は単一の値を持ちます。すなわち、すべてのローカルの time_t は、単一の POSIX time_t に対応します。 posix2time() 関数の動作は、 それほど行儀よくありません。正のうるう秒に出会うとその結果は 1 つにはなら ず、また負のうるう秒に対しては対応する time_t が存在しないためにそれに近 い値が返されます。これらの 2 つの例は、POSIX による表現の欠陥度を示すよい 指標であるといえます。 次の表は、1993 年 6 月末に挿入されたうるう秒に対して、time_t とその POSIX 表現への変換値、およびそれを再変換して戻した値との関係を示します。 DATE TIME T X=time2posix(T) posix2time(X) うるう秒削除は次のようになります。 DATE TIME T X=time2posix(T) posix2time(X) |
[注: posix2time(B+1) => A+0 or A+1] |
うるう秒サポートが有効になっていない場合は、ローカルの time_t と POSIX の time_t は等価となり、 time2posix() および posix2time() 関数はともに恒等関 数となります。 |
関連項目
difftime(3), localtime(3), mktime(3), time(3) FreeBSD 10.0 May 1, 1996 FreeBSD 10.0 |