[ Perl ] 日付の妥当性検証(存在確認)を行う ( timelocal )

Pocket

ここでは、Perl で日付の妥当性を検証するサンプルスクリプトを掲載しています標準であっても良さそうな気もしますが、残念ながらないようです。

スポンサーリンク


日付の妥当性を検証する

日付の妥当性を検証するサンプルスクリプトです。関数として実装してあります。詳細はサンプル内のコメントを参照ください。

# 日付の妥当性の検証を行う(日付の存在確認)
sub is_day_valid {

  # 引数
  # 1.年(西暦)
  # 2.月(1~12)
  # 3.日
  my ($year, $month, $mday) = @_;

  # 後述のtimelocal関数は、西暦は1900を引いた値が必要
  # 月は、0(1月)~11(12月)で管理されている
  $year -= 1900;
  $month--;
    
  require Time::Local;
  eval {
    Time::Local::timelocal(0, 0, 0, $mday, $month, $year);
  };

  # eval 内のスクリプトがエラーの場合は、
  # $@にエラーの内容が入ってくる。エラーがなければ日付は妥当と判断する
  return $@ ? 0 : 1;
}

上記の日付の妥当性を判断する関数は以下のように使用します。


# 2016年11月15日は存在するかチェック
if(is_day_valid(2016, 11, 15)) {
    # OKの場合はこちらを通る
} else {
    # NG の場合はこちら
}

日付の存在確認なんて、ほとんどうるう年のためにあるようなものだと思いますが、どうでもよくなる自分もいます。
どうでも良いというよりは、世界中で閏年やうるう秒を気にし過ぎる風潮がなんかイヤです。

以上、本日のボヤキでした。

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>