ふなばです。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-list:10380] Re: time.c:time_arg()
Date: Tue, 27 Oct 1998 17:34:50 +0900

> まつもと ゆきひろです
> 
> In message "[ruby-list:10367] Re: time.c:time_arg()"
>     on 98/10/27, maeda / src.ricoh.co.jp <maeda / src.ricoh.co.jp> writes:
> 
> |前田@リコーです。
> 
> |UTCに入るうるう秒が一度に1秒というのは、天文関係の文献をあたって
> |確認できました。さて、不精しているので、POSIXの規格にまだ当たっ
> |ていないのですが、POSIXのstruct tmやstrftimeは61を許可しているの
> |でしょうか。私は、「POSIX(とかSolaris)が61秒を許すので、Rubyでも
> |許すことにする」のは十分理にかなったことだと思います。もちろん、
> |RubyはPerlと違ってPOSIXなんか相手にしてないってのもアリですケド。
> 
> いやあ,man locatimeとかでは61秒までって書いてありますね.^^;;;
> これは POSIX を当たるしかないか.どっか(web)に落ちてましたっけ?

# Solaris のほうは (マニュアルの) バグじゃないかなあ...。

ちなみに、SunOS 4.1.x では閏秒はあつかいはなかったんですが、strfimte()
の %j が (000-365) となっていました。これは (001-366) の間違いのようで
す。さらに、strftime() は %W をつかったときの返値がおかしかったりしま
す (これが原因で Ruby が間違えることがあります)。

ところで、もしできたら、Solaris のタイムゾーン関係のコードの出所が知り
たいのですが、tzfile.h に作者の名前がないかみてもらえませんか (たとえ
ば、Arthur David Olson とか)。

僕は ANSI C でも POSIX でも閏秒そのものを勘定していないと理解していま
す。でも、どっちも規格書は読んだことないので、どなたか詳しいかたが発言
されることを期待してます (前田さんの調査に期待)。

ちなみに、僕は ANSI C のほうは K&R2 の記述で、POSIX については様々な記
述からそう判断できると思っています。あるシステムには time2posix() とい
うライブラリがありますが、そのマニュアルにこうありました。

>       IEEE  Standard  1003.1  (POSIX)  legislates  that a time_t
>       value  of  536457599  shall  correspond  to  "Wed  Dec  31
>       23:59:59  GMT  1986."  This effectively implies that POSIX
>       time_t's cannot include leap seconds and, therefore,  that
>       the system time must be adjusted as each leap occurs.

# 00-61 の誤解は ITU-R Recommendation TF.460-4 に起因するいう記事をみか
# けました。以後広く他の規格に引用されたそうです。それによれば、やはり本
# 当に正しい範囲は 00-60 であるということでした。木村さんがいってたのは
# これかなあ。

--Tadayoshi Funaba