前田薫@リコーです。

> 時刻の本質は序数で、整数と判ってても、普通の人間はそのように考えて行動
> していませんよね。壁掛け時計をみて生活している人間に合せて計算機はプロ
> グラムされるので、一見、ただの整数ですが、それが解釈の違いで、大晦日に
> も元旦にもなるというのは結構大きいのではないかと思うわけです。

> で、気にしてたのは、たとえば、ネットワークなどで矛盾する可能性があるか
> なあということでした。実際には殆ど考えなくてよいのかなあと思いますが。

2年くらい前、うるう秒について調べたことがあったのですが、記録が
見つかりません。うろ覚えで書きますので、間違っていたらごめんなさ
い。

現在、ネットワーク上をNTPで流通している時刻は、うるう秒をなかっ
たものとしています。つまり、「the epochからの経過秒数 - これまで
にあったうるう秒の秒数」が使われています。うるう秒の調整は、NTP
上の1秒の長さで調節しているのかな。

参考: Solaris 2.6
maeda@luna 17> perl5 -e '$t = time; print $t % 86400, "\n", scalar(localtime($t)),
4823
Mon Oct 12 10:20:23 1998

4823 == 1 * 3600 + 20 * 60 + 23 です(timezone -9時間ね)。

確かにOSはうるう秒の機構を用意しているのですが、世間で広く一般に
使われている運用ではうるう秒を無視しています。つまり、manで見ら
れるtime_tの定義とは異なる値が得られ、その原因は世界中のシステム
管理者が共謀して(笑)OSのマニュアルを無視した運用をしているという
点にあります。

UNIXの一般常識として、「○日前、○日後の計算には午前0時でなく正
午を使う」というのがありました。今となっては古いのかもしれません
ね。

デフォルトでうるう秒を考慮するSonyの昔のNEWS OS(4.x)では、「NTP
を使うと時計がずれてしまう」という問題が発生し、「正直者がバカを
見る」状況になっていました。OSのリリースで「過去のうるう秒」の表
がアップデートされ、同じtime_tに対するlocaltimeがマシンによって
くい違うなんてことまで発生してました。

>|考えるとすれば、Time  を利用して日を勘定するために  86400 (24*60*60)
>|で割る、なんてことはしてはいけないと、利用者に警告しておかなければいけ
>|ないように思います (どこかで見たような)。
>
>は言えますね.どこかに書いておこう.

というより、time(2)の値を返すと書くべきではないでしょうか。DOSや
Windowsではどうしているのですか? 年月日時分秒からTimeへの変換を
するときうるう秒を考慮しているかという意味ですが……。

-------------------------------  Vulture       LRM20   .□||□.   LRM20
 前田 薫 maeda / src.ricoh.co.jp   75t 175km/h     Md+  o'□||□`o  Md+
 (株)リコー ソフトウェア研究所   HeatSink 18  LG Sm+   .=X~~X=.   Sm+ LG
-------------------------------  Armor 2195           _|_    _|_