PerlのDate::Manipモジュールを利用し、日付の計算を行うUNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、自作スクリプト内で日付を取り扱う場合などに重宝するPerlのDate::Manipモジュールを紹介します。

» 2009年01月19日 08時00分 公開
[ITmedia]

自作スクリプト内で日付を取り扱う必要があるのですが、日付の計算を簡単に行う方法はありませんか?


幾つか方法が考えられますが、ここではPerlのDate::Manipモジュールを利用する方法を紹介します。このモジュールは非常に高機能で、さまざまな用途で役立ちます。

 まずは利用中のシステムに、Date::Manipモジュールをインストールします。CPANモジュールを利用すると簡単です。


# perl -MCPAN -e 'install Date::Manip'

 導入できたら、実際に使ってみましょう。ここでは、応用しやすいようにワンライナー形式で記述します。

現在の日付

 日付を指定する際に、文字列で指定できます。


% perl -MDate::Manip -e 'print ParseDate("today"),"\n";'
2009011919:52:50

任意の日付

 文字列のバリエーションとして、もう少し複雑な指定ができます。以下に幾つか示しておきます。OS、あるいはスクリプト言語の標準的な機能だけでは手間が掛かる計算もDate::Manipモジュールであれば直感的に導き出せます。


% perl -MDate::Manip -e 'print ParseDate("last saturday"),"\n";'
2009011700:00:00
% perl -MDate::Manip -e 'print ParseDate("2nd monday in august"),"\n";'
2009081000:00:00
% perl -MDate::Manip -e 'print DateCalc("today", "+ 4days 3hours 2minutes 1seconds"),"\n";'
2009012323:17:49

ビジネスデーの算出

 業務の中では「翌営業日」という指定を良く使うと思いますが、Date::Manipモジュールはこの算出にも対応しています(土日が休日と仮定)。以下は月曜日に実行した例で、前日(yesterday)は日曜日なので「0」、翌日(tomorrow)は火曜日なので「1」となります。


 % perl -MDate::Manip -e 'print DateCalc("today", "+ 1business days"),"\n";'
 2009011920:10:22
 % perl -MDate::Manip -e 'print Date_IsWorkDay("yesterday"),"\n";'
 0
 % perl -MDate::Manip -e 'print Date_IsWorkDay("tomorrow"),"\n";'
 1

2006年7月8日は、1月1日から数えて何日目か

 1月1日から任意の日付までの日数を算出します。


% perl -MDate::Manip -e 'print Date_DayOfYear(7, 8, 2006),"\n";'
189

2006年から2008年までの海の日リスト

 海の日、つまり7月(7)第3週(3)の月曜日(1)に対応する日付を、3年間分出力します。


% perl -MDate::Manip -e '$, = "\n"; print ParseRecur("*2006-2008:7:3:1:0:0:0"),"\n";'
2006071700:00:00
2007071600:00:00
2008072100:00:00

 このほか、日付文字列のフォーマット変換、独自のイベント/祝日設定、あるいは言語の変換(フランス語で出力など)といった多彩な機能があります。

UNIX関連の悩みなら、「UNIX処方箋」にどうぞ


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ