ふなばです。 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