Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 結果の日付順ソート
- From: Seiji Yamashita <s_yam@xxxxxxxxxxxx>
- Date: Sun, 15 Jun 2003 09:52:47 +0900
- X-ml-name: namazu-users-ja
- X-mail-count: 03371
- References: <3EEB76B6.49ABB019@asahi-net.or.jp>
山下@リムネットです。
yw3t-trns@xxxxxxxxxxxxxxx さんは、06/15 04:25頃
題名 [namazu-users-ja] Re: 結果の日付順ソート
で書きました。
>こちらはもしかすると mailutime を使っていないために、うまくいって
>いないのかもしれません。(未確認)
mailutime を使えばよいことですが、個人的には最初から Date: ヘッダをイ
ンデックスに書き込んでくれてもいいかなと思っています。その後、ファイルが
改竄されても無視されますが。
というわけで、自作ソフトには、mailnews.pl と mailutime を混ぜたフィル
タを添付しています。
検索結果の並び替えには --sort=field:Date を使っています。
***************
*** 121,126 ****
--- 121,129 ----
$partial = $1;
util::dprint("((partial: $partial))\n");
}
+ } elsif ($line =~ s/^date:\s*//i){
+ my $hdate = formatdate($line);
+ $fields->{'date'} = $hdate;
} elsif ($line =~ /^(\S+):\s*(.*)/i) {
my $name = $1;
my $value = $2;
***************
*** 292,297 ****
--- 295,373 ----
$uuin = 0;
$$content .= $line;
}
+ }
+
+ #format the date to 'yyyy/mm/dd(www) hh:nn:ss'
+ sub formatdate ($)
+ {
+ #Japanese
+ my %week_names = ("Sun" => "日", "Mon" => "月", "Tue" => "火",
+ "Wed" => "水", "Thu" => "木", "Fri" => "金", "Sat" => "
土");
+ my $re_week = '(Sun|Mon|Tue|Wed|Thu|Fri|Sat)';
+ my %month_names = ("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4,
+ "May" => 5, "Jun" => 6, "Jul" => 7, "Aug" => 8,
+ "Sep" => 9, "Oct" => 10, "Nov" => 11, "Dec" => 12);
+ 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)';
+ my $re_hour = '(?:[01][0-9]|2[0-3])';
+ my $re_min = '(?:[012345][0-9])';
+ my $re_sec = '(?:[012345][0-9])';
+
+ my ($orig_str) = @_;
+ my $str = $orig_str;
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday);
+ my ($mtime);
+
+ # remove a timezone adjustment such as '+0900'
+ $str =~ s/(\+\d+)//;
+ # remove week day
+ if ($str =~ s/\b($re_week)\b//i) {
+ #English
+ $wday = $1;
+ #Japanese
+ #$wday = $week_names{$1};
+ } else {
+ $wday = "???";
+ }
+
+ # get hour, min and sec.
+ if ($str =~ s/\b($re_hour):($re_min):($re_sec)\b//) {
+ $hour = $1;
+ $min = $2;
+ $sec = $3;
+ } else {
+ $hour = 0;
+ $min = 0;
+ $sec = 0;
+ }
+
+ # get a month
+ if ($str =~ s/\b($re_month)\b//i) {
+ $mon = $month_names{$1};
+ } else {
+ $mon = 0;
+ }
+
+ # get a year
+ if ($str =~ s/\b($re_year)\b//i) {
+ $year = $1;
+ } else {
+ $year = 1970;
+ }
+
+ # get a day
+ # this SHOULD be tried at the last.
+ if ($str =~ s/\b($re_day)\b//i) {
+ $mday = $1;
+ } else {
+ $mday = 0;
+ }
+
+ $mtime = sprintf("%d/%.2d/%.2d(%s) %.2d:%.2d:%.2d",
+ $year, $mon, $mday, $wday, $hour, $min, $sec);
+
+ return $mtime;
}
+---------------------------------+
! 山下 誠二 S.Yam(えすやむ) !
! E-mail: s_yam@xxxxxxxxxxxx !
+---------------------------+