[Tokyo.pm] 恥ずかしながらしくじりました。

Tetsuya Ryuchi ryuchi @ ryuchi.org
2000年 1月 5日 (水) 01:30:06 CST


  りゅうちと言います。

> こんなことをして、ミレニアム・バグをばら撒いてしまいました。
(snip)
>   ($sec,$min,$hr,$dd,$mm,$yy,$week,$days,$isDST) = localtime();
>   if ($yy >70)
>   {
>      $yy = "19".$yy;
>   }
>   else
>   {
>      $yy = "20".$yy;
>   }

  あらら... 対応方法を間違ってしまった様ですね.
  1900年ずれた年が 戻り値になるので 素直に 1900 を足して計算していれば
良かったのに...

  # もしかしたら  1900 を足しているだけのコードを y2k 非対応と思って、
  # 2000年以降 2000 を足すコードを書いている人もいるかもね...
  #
  # if ( $yy > 70 ) { $yy += 1900; } else { $yy += 2000; }
  #
  # とか... しかし これだったら y2k バグが発覚することはなかったのね....

  吉野さんのコードだと 数値で評価したあとに 文字列連結して 文字列に変換
させる様なコードになっていますね。 1桁とか 2桁とか 自分で判断するより、
sprintf の様な 書式付きの print 文で変換させた方が 小さくて 読みやすいと
思いますが...

  たとえば 

  $yy += 1900;
  $ret = sprintf( "%04d%02d", $yy, $mm );

  と書いた方が簡単ではありませんか?


(龍)
--
# From Tetsuya Ryuchi <ryuchi @ ryuchi.org> or <ryuchi @ hoge.org>
#                                  Powered By FreeBSD 3.4-RELEASE



Tokyo-pm メーリングリストの案内