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(デフォルト)、limitpreserveのいずれかです。

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.