oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

Perlで時間の差分を求めたい時はHTTP::Dateを使うと良いというお話。


はい、またいつものNagiosCactiでのプラグイン書いている時の話です。


あるサーバに対してリクエストを投げると、処理完了時間とステータスをメッセージで返すので、
その中身を確認して、現在時刻と比較して処理完了時間がそもそもある閾値を超えていたら
エラーを検出する、という処理を書こうとした時に、サーバ側がUnix Timeじゃなくて
いわゆる普通の書式「Mon Jan 31 14:30:10 2011」で返して来た場合、それが範囲内か
どうかを計算するのが(゚⊿゚)メンドクセと思っていた所、
またも神様(@kazeburoさん)が降臨して頂けました。


「@oranie HTTP::Date とか使うのが簡単かも。大体入っているし」
http://twitter.com/#!/kazeburo/status/31968101411069952


��(゚Д゚;)
そんな便利なものが?
でググルと、

use HTTP::Date;

$string = time2str($time);    # GMT ASCII時刻にフォーマット
$time = str2time($string);    # ASCII日付をマシン時刻に変換


http://homepage3.nifty.com/hippo2000/perltips/HTTP/Date.html

と素晴らしく分かりやすいモジュールでした。

で挙動テストしてみると

#!/usr/bin/perl
use HTTP::Date;

my $you_now = ("Mon Jan 31 14:30:10 2011");
my $my_now  = localtime();


my $you_time = str2time($you_now);
my $my_time = str2time($my_now);


my $result = $my_time - $you_time;


print("$result \n\n");
-------------------------------------------------------------
実行結果
[test] ./test.pl
8083

みたいな感じで無事に秒単位で差分が取れました。
Perl使いの人達の優しさで今日も生きています!