NAME
DateTime::Lite::Duration - DateTime::Liteで使用する期間オブジェクト
SYNOPSIS
use DateTime::Lite::Duration;
my $dur = DateTime::Lite::Duration->new(
years => 1,
months => 6,
days => 15,
hours => 3,
minutes => 10,
seconds => 30,
) || die( DateTime::Lite::Duration->error );
my $dur = DateTime::Lite::Duration->new(
years => 1,
months => 6,
weeks => 2,
days => 15,
hours => 3,
minutes => 10,
seconds => 30,
nanoseconds => 500_000_000,
end_of_month => 'limit', # 'wrap'(デフォルト), 'limit', 'preserve'
) || die( DateTime::Lite::Duration->error );
# イントロスペクション
printf( "Years: %d, Months: %d\n", $dur->years, $dur->months );
# DateTime::Lite と一緒に使用
$dt->add_duration( $dur );
$dt->subtract_duration( $dur );
my $diff = $dt1->subtract_datetime( $dt2 ); # Duration を返します
# 絶対値アクセサ(より大きい単位を取り除いた値)
$dur->years; # 完全な年数
$dur->months; # 年を取り除いた後の月数
$dur->weeks; # 完全な週数
$dur->days; # 週を取り除いた後の日数
$dur->hours; # 完全な時間数
$dur->minutes; # 時間を取り除いた後の分数
$dur->seconds; # 分を取り除いた後の秒数
$dur->nanoseconds; # 秒を取り除いた後のナノ秒数
# 符号付きの生 delta アクセサ
$dur->delta_months; # 符号付き月数(years * 12 + months)
$dur->delta_days; # 符号付き日数
$dur->delta_minutes; # 符号付き分数(hours * 60 + minutes)
$dur->delta_seconds; # 符号付き秒数
$dur->delta_nanoseconds; # 符号付きナノ秒数
# すべての符号付きコンポーネントを一度に取得
my %d = $dur->deltas; # keys: months days minutes seconds nanoseconds
# カレンダー / 時計の部分 duration
my $cal = $dur->calendar_duration; # months + days のみ
my $clock = $dur->clock_duration; # minutes + seconds + nanoseconds のみ
# 期間に対しての算術演算
$dur->add( months => 1, days => 7 );
$dur->subtract( hours => 2 );
$dur->add_duration( $other_dur );
$dur->subtract_duration( $other_dur );
my $inverse = $dur->inverse; # すべてのコンポーネントの符号を反転
my $neg = $dur->inverse( end_of_month => 'wrap' );
# 変換
# 指定した単位の組み合わせとして表現:
my ( $h, $m ) = $dur->in_units( 'hours', 'minutes' ); # 例: (3, 10)
my $total_min = $dur->in_units('minutes'); # スカラー形式
# 比較
my $cmp = DateTime::Lite::Duration->compare( $dur1, $dur2 ); # -1, 0, 1
# 述語
$dur->is_positive; # いずれかのコンポーネントが > 0で、< 0がない場合に真
$dur->is_negative; # いずれかのコンポーネントが < 0で、> 0がない場合に真
$dur->is_zero; # すべてのコンポーネントが 0の場合に真
$dur->is_wrap_mode; # end_of_month eq 'wrap'
$dur->is_limit_mode; # end_of_month eq 'limit'
$dur->is_preserve_mode; # end_of_month eq 'preserve'
$dur->end_of_month_mode; # 'wrap', 'limit', または 'preserve'
# クローン
my $copy = $dur->clone;
# 定数
DateTime::Lite::Duration::MAX_NANOSECONDS(); # 1_000_000_000
# エラー処理
my $dur2 = DateTime::Lite::Duration->new( %bad_args ) ||
die( DateTime::Lite::Duration->error );
$dur->fatal(1); # すべてのエラーを fatal にします(warn+undef ではなく die)
my $err = $dur->error;
VERSION
v0.1.1
DESCRIPTION
DateTime::Lite::Durationは、DateTime::Lite専用に使用される、DateTime::Durationの軽量な移植です。durationは5つの独立した「バケット」に保存されます:months, days, minutes, seconds, nanosecondsです。
month/dayバケットはcalendar単位であり、実際の長さは期間が適用される日付に依存します。minute/second/nanosecondバケットは絶対的なclock単位です。
DateTimeと異なり、DateTime::Liteは予期せずdie()を呼び出すことはありません。
エラー時には、$dur->errorで取得できる例外オブジェクトを設定し、スカラーコンテキストではundef、リストコンテキストでは空リストを返します。チェーン呼び出し(オブジェクトコンテキスト)では、典型的なCan't call method '%s' on an undefined valueを避けるため、ダミーオブジェクト(DateTime::Lite::Null)を返します。
CONSTRUCTOR
new( %args )
受け付けるキー:
years,months-
カレンダー時間です。
yearsは構築時に月へ変換されます(1年= 12か月)。 weeks,days-
カレンダー時間です。
weeksは日に変換されます(1週= 7日)。 hours,minutes-
時計時間です。
hoursは分へ変換されます(1時間= 60分)。 seconds,nanoseconds-
時計時間です。
end_of_month-
月の加算/減算時に月末計算をどのように扱うかを指定します。
wrap(デフォルト)、limit、preserveのいずれかです。
METHODS
Accessors(絶対値)
years, months, weeks, days, hours, minutes, seconds, nanosecondsはすべて、より大きい単位を取り除いた後の、その単位における期間の絶対値(符号なし)の部分を返します。たとえばmonths()は、完全な年数を割り引いた後の月コンポーネントを返します。
符号付きdeltaアクセサ
delta_months, delta_days, delta_minutes, delta_seconds, delta_nanosecondsは、内部の符号付き生値を返します。
calendar_duration / clock_duration
それぞれ、カレンダーコンポーネント(months, days)のみ、または時計コンポーネント(minutes, seconds, nanoseconds)のみを含む新しい期間オブジェクトを返します。
clone
浅いコピーを返します。
compare( $dur1, $dur2 )
クラスメソッドです。2つの期間を単位ごとに比較します。-1、0、または1を返します。
deltas
5つすべての符号付き生値を含むハッシュを返します。
end_of_month_mode
wrap, limit、またはpreserveを返します。
in_units( @units )
指定された単位の組み合わせとして表現した期間を返します。
例:190分の期間に対して$dur->in_units( 'hours', 'minutes' )は(3, 10)を返します。単位が1つだけ指定された場合は、スカラーを返します。
inverse
$dur->inverse;
$dur->inverse( end_of_month => $mode );
すべてのコンポーネントの符号を反転した新しい期間を返します。任意でend_of_monthを上書きできます。
is_negative / is_positive / is_zero
述語メソッドです。
is_wrap_mode / is_limit_mode / is_preserve_mode
end_of_monthモードが一致する場合に真を返します。
add
$dur->add( months => 1, days => 15 );
キーと値のペアで指定された期間("new"と同じキー)を、この期間にその場で加算します。$selfを返します。
add_duration
$dur->add_duration( $other_dur );
別のDateTime::Lite::Durationオブジェクトを、この期間にその場で加算します。$selfを返します。
subtract
$dur->subtract( days => 1 );
キーと値のペアで指定された期間を、この期間からその場で減算します。逆期間を加算することと同等です。$selfを返します。
subtract_duration
$dur->subtract_duration( $other_dur );
別のDateTime::Lite::Durationオブジェクトを、この期間からその場で減算します。$selfを返します。
delta_months
my $m = $dur->delta_months; # 負になる場合があります
符号付きの生monthsコンポーネントを返します。
delta_days
my $d = $dur->delta_days;
符号付きの生daysコンポーネントを返します。
delta_minutes
my $min = $dur->delta_minutes;
符号付きの生minutesコンポーネントを返します。
delta_seconds
my $s = $dur->delta_seconds;
符号付きの生secondsコンポーネントを返します。
delta_nanoseconds
my $ns = $dur->delta_nanoseconds;
符号付きの生nanosecondsコンポーネントを返します。
MAX_NANOSECONDS
my $max = DateTime::Lite::Duration::MAX_NANOSECONDS();
1秒に含まれるナノ秒数である1_000_000_000(10^9)を返します。ナノ秒の正規化に内部で使用されます。
error
my $dur = DateTime::Lite::Duration->new( %bad_args ) ||
die( DateTime::Lite::Duration->error );
インスタンスメソッドおよびクラスメソッドです。メッセージ付きで呼び出された場合、DateTime::Lite::Exceptionを作成して保存し、"fatal"に応じて警告またはdieし、undefを返します。引数なしで呼び出された場合は、直近のエラーオブジェクトを返します。
fatal
$dur->fatal(1); # fatal モードを有効化
fatalフラグを取得または設定します。真の場合、"error"の呼び出しはwarn-and-return-undefではなくdieします。
pass_error
sub my_op
{
my $self = shift( @_ );
my $res = $self->_inner_op ||
return( $self->pass_error );
return( $res );
}
下位レベルの呼び出しからのエラーを、新しい例外を構築せずに、このオブジェクトのエラースロットへ伝播します。内部およびサブクラスで使用されます。
エラー処理
エラー時、メソッドはスカラーコンテキストではundef、リストコンテキストでは空リストを返します。例外は$obj->errorまたはDateTime::Lite::Duration->errorで取得できます。
例外オブジェクトは、ファイル名と行番号を含む、人間が読めるメッセージへ文字列化されます。
errorは、コンテキストがチェーン呼び出し、またはオブジェクトコンテキストであることを検出します。その場合、undefを返す代わりにDateTime::Lite::Nullのダミーインスタンスを返し、典型的なPerlエラーCan't call method '%s' on an undefined valueを避けます。
インスタンスオプションfatalが有効になっている場合、発生したエラーはすべてfatalになります。
SEE ALSO
DateTime::Lite, DateTime::Lite::Exception
AUTHOR
Jacques Deguest <jack@deguest.jp>
COPYRIGHT & LICENSE
Copyright(c) 2026 DEGUEST Pte. Ltd.
All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.