Scrapdiary

DesigningとEngineeringの架け橋

ロジカルに考えるとはこういうことか

昨日に引続きPerl。あのままでは年またぎでうまく比較できないので、ちょっと考え方を変えてみた。

  • 未来の日付は基本あり得ない(想定しないもの)とする
  • もし未来の日付だったら過去と見なし、YYYYを一年前の値を再セット
  • その上で本日と比較して差分をみる

という方向性で改修してみる。

DateSimple2.pl

#!/usr/bin/perl
use strict;
use warnings;
use Date::Simple qw(date today);

my $input_date  = $ARGV[0] or die("No parameter!\n");
my $today = today();
my $target_date = date($today->year . $input_date) or die("Object didn't create!");

if($today < $target_date){ #(1)未来は想定しない
        print "$target_date is future date!(set: year - 1)\n";
        $target_date = date($today->year -1 . $input_date); #(2)1年前のYYYYをセット
}

my $diff = $today - $target_date;

print "Today is $today, target date is $target_date and diff is $diff \n",
      "Compare is ",
      $diff <  7 ? "OK! (within 1 week)\n" : "NG! (over 1 week)\n"; #(3)再度比較
exit;

仮に今日が1月1日で

my $today = date('20090101');

指定日が12月28日だとしても

% perl DateSimple.pl 1228
2009-12-28 is future date!(set: year - 1)
Today is 2009-01-01, target date is 2008-12-28 and diff is 4 
Compare is OK! (within 1 week)

「みなし」で正確に比較してくれる。今度こそうまくいったかな?

処理自体は単純明快なんだけど、観点を変えることで解決できるものなんだ。本当にわずかだけど、ロジカル(論理的)な思考ってこういう事の積み重ねなのかなーと感じられて、感動。