From: Takahiro Kambe Date: 2001-01-07T00:59:21+09:00 Subject: [ruby-list:27030] Re: Time & Date In message <20010107002130.04c8239c.tommy@tmtm.org> on Sun, 7 Jan 2001 00:22:27 +0900, とみたまさひろ wrote: > > 今時のUNIXではtime()はシステムコールではなくてライブラリ、time(3)です。 > > あ、そうなんですか。Linux や Solaris ではシステムコールだったもんで…。 ほんとはそうじゃないかもしれません。Solarisあたりがシステムコールとし ているのは、過去へのバイナリ互換への配慮でしょう。 > いや、だから、time() が返す (time_t)-1 はエラーでいいんですけど、 > それ以外の localtime() や ctime() や Ruby の Time クラスで、負の time_t > を 1970-01-01 00:00:00 GMT 以前の時刻として扱えない理由はないんじゃ > ないかってことです。文章ヘタですいません。 いえいえ、よくわかりました。 > 実際、Linux(というか glibc?) や Solaris では localtime() や ctime() に glibcでしょうね。glibcも4.4BSD-lite系も、使ってるtzcodeのベースは同じ ものかな? > 負の time_t を与えても動きますよね。Ruby の Time が負の数をエラーに ほんとうに動いていますか? tzcodeをベースとした手元のlocaltime(3)のソー スコードには、 for (year = EPOCH_YEAR; year <= 2037; ++year) { starttime = transtime(janfirst, year, &start, stdoffset); なんていう形のコーディングもなされています。(EPOCH_YEARは1970です。) で、本当にタイムゾーンのデータベースの参照も含めて正しく処理がなされて いるのか、そうでないのかが気になります。(私自身も確認はしていません。) > している理由が「time() が -1 をエラーとしているから」だけじゃ理由に > なってないように思うんです。 localtime()やctime()が取る引数が「1970年1月1日00:00:00 UTCからの秒数」 という定義をPOSIXなりで定義されているなら、負の値を与えて正しく動作す ることは期待すべきではない、と思うわけです。 -- 神戸 隆博(かんべ たかひろ) at home