From: "とみたまさひろ" Date: 2001-01-07T01:24:59+09:00 Subject: [ruby-list:27033] Re: Time & Date とみたです。 [Takahiro Kambe さんが] ["[ruby-list:27030] Re: Time & Date" で曰く] > > 実際、Linux(というか glibc?) や Solaris では localtime() や ctime() に > > 負の time_t を与えても動きますよね。 > ほんとうに動いていますか? tzcodeをベースとした手元のlocaltime(3)のソー > スコードには、 > > for (year = EPOCH_YEAR; year <= 2037; ++year) { > starttime = transtime(janfirst, year, &start, > stdoffset); > > なんていう形のコーディングもなされています。(EPOCH_YEARは1970です。) > で、本当にタイムゾーンのデータベースの参照も含めて正しく処理がなされて > いるのか、そうでないのかが気になります。(私自身も確認はしていません。) VineLinux 2.1 で TZ 環境変数を変えて localtime() を試してみましたが、 ちゃんと動いているように見えます。 # 私の誕生日は -71658000 でした :-) localtime() のソースは確認してないんで、負の値に対応するように 作られているのか、たまたま動いているだけなのかはわかりませんが…。 > > している理由が「time() が -1 をエラーとしているから」だけじゃ理由に > > なってないように思うんです。 > localtime()やctime()が取る引数が「1970年1月1日00:00:00 UTCからの秒数」 > という定義をPOSIXなりで定義されているなら、負の値を与えて正しく動作す > ることは期待すべきではない、と思うわけです。 POSIX は見たことないんですが、負の値についての扱いが定義されていないなら、 それは処理系依存でいいのかな…と。で、負の値を扱える処理系で、わざわざ Ruby がエラーにする必要もないんじゃないか、と私は思うのでした。 --- とみたまさひろ http://www.tmtm.org 日本MySQLユーザ会 http://www.mysql.gr.jp