=encoding euc-jp =head1 NAME Date::Simple - 簡単な日付オブジェクト。 =head1 概要 use Date::Simple ('date', 'today'); # Difference in days between two dates: $diff = date('2001-08-27') - date('1977-10-05'); # Offset $n days from now: $date = today() + $n; print "$date\n"; # uses ISO 8601 format (YYYY-MM-DD) use Date::Simple (); my $date = Date::Simple->new('1972-01-17'); my $year = $date->year; my $month = $date->month; my $day = $date->day; use Date::Simple (':all'); my $date2 = ymd($year, $month, $day); my $date3 = d8('19871218'); my $today = today(); my $tomorrow = $today + 1; if ($tomorrow->year != $today->year) { print "Today is New Year's Eve!\n"; } if ($today > $tomorrow) { die "warp in space-time continuum"; } print "Today is "; print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur') [$today->day_of_week]); print "day.\n"; # you can also do this: ($date cmp "2001-07-01") # and this ($date <=> [2001, 7, 1]) =begin text インストール システムに"make"プログラムか、そのクローンがある場合: perl Makefile.PL make make test make install "make"がないなら、"lib/Date"ディレクトリをモジュールディレクトリ ("perl -V:sitelib"で、見付かります)にコピーしてください。 "make test"が失敗したら、たぶん、システムがC のコードをコンパイルできないということでしょう。 ためしてください; make distclean perl Makefile.PL noxs make make test make install これで、pure-perl 実装を使うでしょう。 =end text =head1 説明 日付は、時間と時間帯なしでも、十分に複雑です。 このモジュールは、簡単な日付オブジェクトを作ります。次のものを取り扱います: =over 4 =item 妥当性 1999-02-29は、拒否し、2000-02-29は、受け入れます。 =item 間隔の計算 与えられた2つの日付の間には、何日間あるか? 今日からN日後の日付は何か? =item 曜日の計算 与えられた日付は何曜日か? =back Date::Simpleは、時分秒、時間帯は取り扱いB<ません>。 日付は、妥当な範囲の、年月日の数字によって、ユニークに特定されます。 このモジュールは、不当な日付のオブジェクトを作ることを許しません。 不当な日付で作ろうとすると、undefを返します。 月のナンバリングは、1月が1で始まります。Cや、Javaとは、違っています。 年は、4桁です。 9999年までのグレゴリオ日付が正確に取り扱われます。 ですが、現在の日付が要求された場合、Perlの組み込み関数のCを当てにします。 プラットフォームの中には、Cは、 UNIX Cの2038年1月の回り込みのように転覆する脆弱性があるかもしれません。 オーバーロードが使われているので、2つの日付を比較するか、引き算をするのに、 標準的な数値演算子、C<==>のようなものを使うことが出来ます。 また、日付オブジェクトと数字の足し算は、別の日付ブジェクトになります。 Date::Simpleオブジェクトは、不変です。C<$date1>をC<$date2>に割り当てた後、 C<$date1>の変更はC<$date2>にまったく影響を与えません。 このことは、たとえば、Cオペレーションのようなものがないと言うことを意味します。 C<$date++>は、C<$date>に、新しいオブジェクトを割り当てます。 このモジュールは、さまざまなドキュメント化されていない関数を含んでいます。 それらは、全てのプラットフォームで利用可能でないし、将来のリリースで、変更するか、消えるかもしれません。 これらのいくつかを公にすべきと思うなら、作者に教えてください。 =head1 複数のコンストラクタ いくつかの関数は、文字列か数字の表現をとり、対応する日付オブジェクトを返します。 もっとも一般的なのは、Cです。newの引数リストは、空か (現在の日付を返します)、ISO 8601フォーマット(YYYY-MM-DD)の文字列か、 年月日の数字の配列または配列リファレンスか、日付オブジェクトです。 =over 4 =item Date::Simple->new ([ARG, ...]) =item date ([ARG, ...]) my $date = Date::Simple->new('1972-01-17'); 渡された値が妥当な日付を指定していたら、Cメソッドは、日付オブジェクトを返します。 渡された値が不正であれば、メソッドは、undefを返します。 引数が数字の範囲に反したフォーマットで不正なら、Cは、死にます。 C関数は同じ機能を提供しますが、インポートされなければならないか、 Cのように、修飾されなければなりません。 (すべてのパブリックな関数をインポートするためには、Cとしてください)。 この関数は、不正な入力は全て、undefを返します。 Cのようにいくつかのケースで死ぬことはありません。 =item today() Cによって、現在の日付を返します。 B<注意:>明日の日付(または、今日からの一定のオフセット)を得るためにCを 使ってはいけません。Perlは、これを、Cとして、解釈します。 関数の後に、空の括弧が必要です:C =item ymd (YEAR, MONTH, DAY) 与えられた年月日の数字で、日付をブジェクトを返します。 引数が、妥当な日付を指定していなければ、undefを返します。 例: use Date::Simple ('ymd'); $pbd = ymd(1987, 12, 18); =item d8 (STRING) "YYYYMMDD"として、文字列を解釈し、対応する日付オブジェクトを返します。 文字列が間違ったフォーマットか、妥当な日付を指定していなければ、 undefを返します。 例: use Date::Simple ('d8'); $doi = d8('17760704'); 覚え方:文字列が Cにマッチする. また、"d8" は、 もし、8 が、発音どおりに広げられたら、"date" と綴ります。 =back =head1 インスタンスメソッド =over 4 =item DATE->next my $tomorrow = $today->next; 明日に相当するオブジェクトを返します。 =item DATE->prev my $yesterday = $today->prev; 昨日に相当するオブジェクトを返します。 =item DATE->year my $year = $date->year; 日付オブジェクトの年を数字で返します。 =item DATE->month my $month = $date->month; 日付オブジェクトの月を1から12の数字で返します。 =item DATE->day my $day = $date->day; 日付オブジェクトの月の日を、1から31の数字で返します。 =item DATE->day_of_week 0から6の日付オブジェクトの曜日を表す数字を返します。 0は、日曜日を意味します。 =item DATE->as_ymd my ($year, $month, $day) = $date->as_ymd; 3っつの数字のリストを返します:年と月と日です。 =item DATE->as_d8 "d8"表記(Cを見てください)で返します。 C<$date->Eformat("%Y$m$d")>とおなじです。 =item DATE->format (STRING) =item DATE->strftime (STRING) これらの関数は同等です。日付を表す文字列を、指定されたフォーマットで返します。 パラメータを渡さなければ、ISO8601フォーマットが返ります。 my $change_date = $date->format("%d %b %y"); my $iso_date1 = $date->format("%Y-%m-%d"); my $iso_date2 = $date->format; フォーマットのパラメータは、srrftime(3)に渡すものと、似ています。 これは私たちが日付をフォーマットするためにそれを実際にstrftimeに渡すからです。 このことは、プラットフォームや地域を横切って、異なる振舞を生じるかもしれませんし、 さらに、どこでも働くとは限らないかもしれません。 =back =head1 演算子 Date:Simpleインスタンスと一緒に、いくつかの演算子を使うことが出来ます。 式の片方が日付オブジェクトで、演算子が2つの日付オブジェクトを期待するなら、 もう片方がCとして、解釈されます。 ですので、配列リファレンスかISO 8601の文字列ならば動くでしょう。 =over 4 =item DATE + NUMBER =item DATE - NUMBER C<+>とC<->演算子を使うことで、日数で、新しい日付オフセットを生成出来ます。 =item DATE1 - DATE2 日付の間の日数を見つけるために2つの日付を引くことができます。 =item DATE1 == DATE2 =item DATE1 < DATE2 =item DATE1 <=> DATE2 =item DATE1 cmp DATE2 =item など 算術/文字列比較演算子を使って、2つの日付を比較することが出来ます。 =item DATE += NUMBER =item DATE -= NUMBER += と、-= 演算子を使って、日数によって、日付をインクリメント、デクリメント出来ます。 これは、実際、新しい日付オブジェクトを生み出しますので、C<$date = $date + $number>と同じです。 =item "$date" ISO 8601(例:2000-01-17)で、指定された形式で、 日付オブジェクトを直接に文字列に挿入できます。 =back =head1 ユーティリティ =over 4 =item leap_year (YEAR) その年が閏年なら、真を返します。 =item days_in_month (YEAR, MONTH) 年と月の日数を返します。 =back =head1 著者 Marty Pauley John Tobey =head1 著作権 Copyright (C) 2001 Kasei Copyright (C) 2001 John Tobey. This program is free software; you can redistribute it and/or modify it under the terms of either: a) the GNU General Public License; either version 2 of the License, or (at your option) any later version. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA b) the Perl Artistic License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.