名前¶
Date::Simple - 簡単な日付オブジェクト。
概要¶
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])
説明¶
日付は、時間と時間帯なしでも、十分に複雑です。 このモジュールは、簡単な日付オブジェクトを作ります。次のものを取り扱います:
- 妥当性
-
1999-02-29は、拒否し、2000-02-29は、受け入れます。
- 間隔の計算
-
与えられた2つの日付の間には、何日間あるか? 今日からN日後の日付は何か?
- 曜日の計算
-
与えられた日付は何曜日か?
Date::Simpleは、時分秒、時間帯は取り扱いません。
日付は、妥当な範囲の、年月日の数字によって、ユニークに特定されます。 このモジュールは、不当な日付のオブジェクトを作ることを許しません。 不当な日付で作ろうとすると、undefを返します。 月のナンバリングは、1月が1で始まります。Cや、Javaとは、違っています。 年は、4桁です。
9999年までのグレゴリオ日付が正確に取り扱われます。 ですが、現在の日付が要求された場合、Perlの組み込み関数のlocaltime
を当てにします。 プラットフォームの中には、localtime
は、 UNIX time_t
の2038年1月の回り込みのように転覆する脆弱性があるかもしれません。
オーバーロードが使われているので、2つの日付を比較するか、引き算をするのに、 標準的な数値演算子、==
のようなものを使うことが出来ます。 また、日付オブジェクトと数字の足し算は、別の日付ブジェクトになります。
Date::Simpleオブジェクトは、不変です。$date1
を$date2
に割り当てた後、 $date1
の変更は$date2
にまったく影響を与えません。 このことは、たとえば、set_year
オペレーションのようなものがないと言うことを意味します。 $date++
は、$date
に、新しいオブジェクトを割り当てます。
このモジュールは、さまざまなドキュメント化されていない関数を含んでいます。 それらは、全てのプラットフォームで利用可能でないし、将来のリリースで、変更するか、消えるかもしれません。 これらのいくつかを公にすべきと思うなら、作者に教えてください。
複数のコンストラクタ¶
いくつかの関数は、文字列か数字の表現をとり、対応する日付オブジェクトを返します。 もっとも一般的なのは、new
です。newの引数リストは、空か (現在の日付を返します)、ISO 8601フォーマット(YYYY-MM-DD)の文字列か、 年月日の数字の配列または配列リファレンスか、日付オブジェクトです。
- Date::Simple->new ([ARG, ...])
- date ([ARG, ...])
-
my $date = Date::Simple->new('1972-01-17');
渡された値が妥当な日付を指定していたら、
new
メソッドは、日付オブジェクトを返します。 渡された値が不正であれば、メソッドは、undefを返します。 引数が数字の範囲に反したフォーマットで不正なら、new
は、死にます。date
関数は同じ機能を提供しますが、インポートされなければならないか、Date::Simple::Date
のように、修飾されなければなりません。 (すべてのパブリックな関数をインポートするためには、use Date::Simple (':all');
としてください)。 この関数は、不正な入力は全て、undefを返します。new
のようにいくつかのケースで死ぬことはありません。 - today()
-
localtime
によって、現在の日付を返します。注意:明日の日付(または、今日からの一定のオフセット)を得るために
today + 1
を 使ってはいけません。Perlは、これを、today(+1)
として、解釈します。 関数の後に、空の括弧が必要です:today() + 1
- ymd (YEAR, MONTH, DAY)
-
与えられた年月日の数字で、日付をブジェクトを返します。 引数が、妥当な日付を指定していなければ、undefを返します。
例:
use Date::Simple ('ymd'); $pbd = ymd(1987, 12, 18);
- d8 (STRING)
-
"YYYYMMDD"として、文字列を解釈し、対応する日付オブジェクトを返します。 文字列が間違ったフォーマットか、妥当な日付を指定していなければ、 undefを返します。
例:
use Date::Simple ('d8'); $doi = d8('17760704');
覚え方:文字列が
/\d{8}/
にマッチする. また、"d8" は、 もし、8 が、発音どおりに広げられたら、"date" と綴ります。
インスタンスメソッド¶
- DATE->next
-
my $tomorrow = $today->next;
明日に相当するオブジェクトを返します。
- DATE->prev
-
my $yesterday = $today->prev;
昨日に相当するオブジェクトを返します。
- DATE->year
-
my $year = $date->year;
日付オブジェクトの年を数字で返します。
- DATE->month
-
my $month = $date->month;
日付オブジェクトの月を1から12の数字で返します。
- DATE->day
-
my $day = $date->day;
日付オブジェクトの月の日を、1から31の数字で返します。
- DATE->day_of_week
-
0から6の日付オブジェクトの曜日を表す数字を返します。 0は、日曜日を意味します。
- DATE->as_ymd
-
my ($year, $month, $day) = $date->as_ymd;
3っつの数字のリストを返します:年と月と日です。
- DATE->as_d8
-
"d8"表記(
d8
を見てください)で返します。$date-
>format("%Y$m$d")>とおなじです。 - DATE->format (STRING)
- 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に渡すからです。 このことは、プラットフォームや地域を横切って、異なる振舞を生じるかもしれませんし、 さらに、どこでも働くとは限らないかもしれません。
演算子¶
Date:Simpleインスタンスと一緒に、いくつかの演算子を使うことが出来ます。 式の片方が日付オブジェクトで、演算子が2つの日付オブジェクトを期待するなら、 もう片方がdate(ARG)
として、解釈されます。 ですので、配列リファレンスかISO 8601の文字列ならば動くでしょう。
- DATE + NUMBER
- DATE - NUMBER
-
+
と-
演算子を使うことで、日数で、新しい日付オフセットを生成出来ます。 - DATE1 - DATE2
-
日付の間の日数を見つけるために2つの日付を引くことができます。
- DATE1 == DATE2
- DATE1 < DATE2
- DATE1 <=> DATE2
- DATE1 cmp DATE2
- など
-
算術/文字列比較演算子を使って、2つの日付を比較することが出来ます。
- DATE += NUMBER
- DATE -= NUMBER
-
+= と、-= 演算子を使って、日数によって、日付をインクリメント、デクリメント出来ます。 これは、実際、新しい日付オブジェクトを生み出しますので、
$date = $date + $number
と同じです。 - "$date"
-
ISO 8601(例:2000-01-17)で、指定された形式で、 日付オブジェクトを直接に文字列に挿入できます。
ユーティリティ¶
- leap_year (YEAR)
-
その年が閏年なら、真を返します。
- days_in_month (YEAR, MONTH)
-
年と月の日数を返します。
著者¶
Marty Pauley <[email protected]>
John Tobey <[email protected]>
著作権¶
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.