人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

前回のCGIについての質問の続きになります。よろしくお願いいたします。
原因の部分が判明したのですが、どこが悪いのかがわかりません。
かたちは変えずに修正できるのでしょうか。わかる方お願いいたします。

文中の「$time = timelocal(0, $min, $h, $d, $Mon{$m} - 1, $y);」の部分についてエラーがでます。

# メールの Date から time 値を取得する

sub xxx_get_mail_time{

use Time::Local;

my($da)=@_;

if ($da eq "") {return time;} ## パラメータ空の場合は現在を返す



my($w,$d,$m,$y,$t,$nd,$canma,$find,$wd,,$h,$min,$sec,$nh);

%Mon = ("Jan",1,"Feb",2,"Mar",3,"Apr",4,

"May",5,"Jun",6,"Jul",7,"Aug",8,

"Sep",9,"Oct",10,"Nov",11,"Dec",12);

chomp $da;

$canma = ",";

$find = index ($da, $canma);

if ($find >= 0) {

($w,$d,$m,$y,$t) = split(/ /,$da);

$wd = substr($w,0,3);

}

else{

($d,$m,$y,$t) = split(/ /,$da);

}

if(length($d)==1){

$nd = "0".$d;

}

else{

$nd = $d;

}

$d =~s/^[0]//;

($h,$min,$sec) = split(/:/,$t);

$h =~s/^[0]//;

$min =~s/^[0]//;

$sec =~s/^[0]//;

my $time;

$time = timelocal(0, $min, $h, $d, $Mon{$m} - 1, $y);



return $time;

}

●質問者: kasai-de_eb
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●200ポイント ベストアンサー

【変更点】
コメント欄に同じですが、ハッシュのほうの値を最初からゼロにしておけば、
引き算するという手間がなくなり処理が早くなります

%Mon = ("Jan",0,"Feb",1,"Mar",2,"Apr",3,"May",4,"Jun",5,"Jul",6,"Aug",7,"Sep",8,"Oct",9,"Nov",10,"Dec",11);

$time = timelocal(0, $min, $h, $d, $Mon{$m}, $y);

【追加点】
年は1900年基準で計算しますので1900を引く必要があります

$y -= 1900;

rouge_2008さんのコメント
windofjulyさん > 年は1900年基準で計算しますので1900を引く必要があります 必要がない限り、今後は4桁の西暦をそのまま渡すといいようです。 http://www.h3.dion.ne.jp/~sakatsu/Perl/Notes_Perl_timegm_timelocal.htm ※少ししか確認していないので、解釈間違いがあったらすみません・・・

うぃんどさんのコメント
rouge_2008 さん 2038年問題への対応状況の確認(perlのバージョン確認)は必須でした・・・ あと・・・エラーコメントの確認も・・・ コメントありがとうございました 手っ取り早いのは、$daや、$min, $h, $d, $Mon{$m}, $yの内容をプリントアウトして、 timelocalに正しいパラメータを送れているかどうかを確認してもらうことですが・・・ 応答無いので、どうしたものか・・・
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ