とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:calendar_datesimple

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:calendar_datesimple [2017/12/14 20:18]
perl:calendar_datesimple [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== 日付の四則演算を行う(Date::Simple) - Perl ======
 +~~socialite~~
 +<note important>この記事は2006年10月11日に書かれたものです。</note>
 +
 +ある日から15日先(または前)の日付を計算するなどしたいが、どうすれば良いだろうか? time値が分かっていれば簡単に求めることが出来るが、それが全く分からない。
 +
 +今回はDate::Simpleを使った解法を示すことにする。以下のプログラムの実行には、Date::Simpleモジュールのインストールが必要となっている。
 +
 +===== サンプル =====
 +<code perl>
 +;#
 +;#X日後(前)の日付を求める
 +;#
 +
 +use Date::Simple;
 +
 +#-- 計算元の日付 --#
 +my ($yyyy, $mm, $dd) = (2006, 12, 31);
 +
 +#-- 加算(減算)する値 --#
 +my $plus = 5;
 +
 +#-- 計算 --#
 +$result = calDate($yyyy, $mm, $dd, 5);
 +print $result;
 +
 +
 +#----------------------------------#
 +#日付の演算を行う
 +#----------------------------------#
 +sub calDate{
 +  my $yyyy = shift;
 +  my $mm = shift;
 +  my $dd = shift;
 +  my $plus = shift;
 +
 +  #演算
 +  my $date = Date::Simple::ymd($yyyy, $mm, $dd);
 +  my $result = $date + $plus;
 +
 +  #戻す
 +  return(
 +    wantarray? ($date->year, $date->month, $date->day):$result
 +  );
 +}
 +</code>
 +
 +===== 実行結果 =====
 +<code>
 +2007-01-05
 +</code>
 +
 +上記のcalDate関数では、関数の呼び出し元がリスト(配列など)を求めている場合は、年・月・日をそれぞれ返し、スカラーの場合は実行結果のような文字列を返す。
 +
 +==== もっと簡単に演算 ====
 +例えば次のようなコードを書くと、日付と日付の間に何日あるかを調べることができる。
 +
 +<code perl>
 +use Date::Simple;
 +print date('2001-08-27') - date('1977-10-05');
 +</code>
 +
 +※動作しない場合は「Date::Simple::date('2001-08-27')」などとパッケージ名も指定する。
 +
 +==== 初期化について ====
 +例ではymdを使用しているが、次のような初期化(オブジェクトの生成、取得)を行うことも可能だ。
 +
 +<code perl>
 +use Date::Simple;
 +my $date = Date::Simple->new('1972-01-17');
 +</code>
 +
 +
 +==== 曜日の取得 ====
 +曜日の取得はday_of_weekメソッドを呼び出すことで可能。
 +
 +<code perl>
 +use Date::Simple;
 +my $date = Date::Simple->new('1979-10-05');
 +my $youbi = $date->day_of_week;
 +
 +print (('日','月','火','水','木','金','土')[$youbi]);
 +</code>
 +
 +
 +その他詳しいことはドキュメントを参照されたい。
 +
 +  = DateSimple - 簡単な日付オブジェクト : http://perldoc.jp/docs/modules/Date-Simple-2.03/Simple.pod
 +
 +
 +===== 関連書籍 =====
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4798139815}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00O8GIL62}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl カレンダー 日付 }}
 +~~socialite~~
  

関連ページ