namazu-ml(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: y2k problem



綿密なテストをありがとうございます。

knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:

>3. メールのDateフィールド
>
>適当にDateフィールドの値を設定したメールを用意し、インデックスを作成、
>namazu -e/-lを実行してソート結果が正しくなるかどうかを確認。
>
>結果:
>
>年が4桁で記録されているものについては正しく動作する。しかし、2桁で記録
>されているものについては奇妙な動作をする。
(snip)
>  この点を修正する必要があるのではないでしょうか。

新しい順/古い順のソートは単純にファイルのタイムスタンプで比
較しているだけで、 Date: ヘッダは見ていません。Date: ヘッダ
を元にファイルのタイムスタンプを変更するツール mailutime を
添付しているのはそのためです。

で、確認してみると、mailutime の方は 2000年問題がありました。
メイル末尾のパッチをあてれば解決します。mknmz にはたぶん問題
はないでしょう。 (2038年問題はありますが)

p.s.
6月25日に <http://www.linux.or.jp/JLA/19990624.html> で 20分
くらい喋ります。いらっしゃる方はいませんか?

-- Satoru Takabayashi

*** mailutime.pl.orig	Wed Jun 23 22:55:07 1999
--- mailutime.pl	Wed Jun 23 23:00:55 1999
***************
*** 31,37 ****
  		   "Sep" => 8, "Oct" => 9, "Nov" => 10, "Dec" => 11);
  my $re_month =  join('|', keys (%month_names));
  my $re_day   =  '(?:0?[1-9]|[12][0-9]|3[01])';
! my $re_year  =  '(?:\d\d\d\d+|[789]\d)';  # allow 2 digit fomrat such as '98'
  my $re_hour  =  '(?:[01][0-9]|2[0-3])';
  my $re_min   =  '(?:[012345][0-9])';
  my $re_sec   =  '(?:[012345][0-9])';
--- 31,37 ----
  		   "Sep" => 8, "Oct" => 9, "Nov" => 10, "Dec" => 11);
  my $re_month =  join('|', keys (%month_names));
  my $re_day   =  '(?:0?[1-9]|[12][0-9]|3[01])';
! my $re_year  =  '(?:\d\d\d\d+|\d\d)';  # allow 2 digit fomrat such as '98'
  my $re_hour  =  '(?:[01][0-9]|2[0-3])';
  my $re_min   =  '(?:[012345][0-9])';
  my $re_sec   =  '(?:[012345][0-9])';
***************
*** 87,92 ****
--- 87,94 ----
  	/x) 
      {
  	my ($mday, $mon, $year, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
+ 	$year += 2000 if $year < 50;
+ 	$year += 1900 if 50 <= $year && $year <= 99;
  	$mon = $month_names{$mon};
  	my $mtime = timelocal($sec, $min, $hour, $mday, $mon, $year);
  	return $mtime;