Perl のTips...
日付の「演算」
(2001.07.10)

概要

 日付に対して演算を施す。yyyy年mm月dd日のN日前とか、N日後といっ た計算をする。

適用範囲

Perl 5.005

解説

 システム時刻を取るのは簡単ですが、それをもとに「10日後は何月何 日?」というのを計算するのはあんがい大変です。

 そこで、date_operateなる演算を考えてみました。こんな風に使います。

date_operate(\date, $operation, $days);

 \dateはtime関数で得られた値と同形式のシステム時刻データであること。 また、リファレンスとしている。

  $operationは、施す演算を指定する演算子。"+"または"-"のいずれ かであること。ただしこのバージョンでは演算子の検査をしていないの で、Perlの二項演算子ならなんでも食ってしまう。もちろんその場合の 結果は保証しない。

 $daysは加減算する日数。正または負の整数であること……だが、こ れも検査はしていない。小数を与えてもそれなりに動く(ようである)。

コード

  1: sub date_operate
  2: {
  3:     my($date, $op, $days) = @_;
  4:     my($exp, $val);
  5: 
  6:     $val = (60 * 60 * 24) * $days;
  7:     $exp = "\$\$date = \$\$date $op $val";
  8:     eval $exp;
  9: }

補足

 time関数の値が整数であることを利用して、その値に対して直接加減 算するようにしているのと、evalを使っているところがミソといえばミ ソ。

 時刻データは別にリファレンスでなければならないことはありません (たぶん)。更新された時刻データを戻り値として返してあげればよいわ けです。

(2001.07.10)

PerlのTipsへ
参考図書へ
コンピューター言語研究所へ
トップページへ
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.