DateTime-Lite

 view release on metacpan or  search on metacpan

lib/DateTime/Lite/JA.pod  view on Meta::CPAN

    $dt->datetime;
    $dt->ymd;                            # "2026-04-10"
    $dt->ymd('/');                       # "2026/04/10"
    $dt->hms;                            # "06:10:30"
    $dt->dmy('.');                       # "10.04.2026"
    $dt->mdy('-');                       # "10-04-2026"
    $dt->rfc3339;                        # "2026-04-10T06:10:30+09:00"
    $dt->strftime('%Y-%m-%d %H:%M:%S');  # "2026-04-10 06:10:30"
    $dt->format_cldr('yyyy/MM/dd');      # "2026/04/10"(Unicode CLDRパターン)
    "$dt";                               # iso8601(またはformatter)による文字列化

    # 日時演算
    $dt->add( years => 1, months  => 2, days    => 3,
              hours => 4, minutes => 5, seconds => 6 );
    $dt->subtract( weeks => 2 );

    my $dur = DateTime::Lite::Duration->new( months => 6 );
    $dt->add_duration( $dur );
    $dt->subtract_duration( $dur );

    my $diff     = $dt->subtract_datetime( $other );           # Duration
    my $abs_diff = $dt->subtract_datetime_absolute( $other );  # 時刻のみの Duration
    my $dd       = $dt->delta_days( $other );
    my $dmd      = $dt->delta_md( $other );
    my $dms      = $dt->delta_ms( $other );

    # ミューテータ
    $dt->set( year => 2027, month => 1, day => 1 );
    $dt->set_year(2027);
    $dt->set_month(1);
    $dt->set_day(1);
    $dt->set_hour(0);
    $dt->set_minute(0);
    $dt->set_second(0);
    $dt->set_nanosecond(0);
    $dt->set_time_zone('America/New_York');
    $dt->set_locale('en-US');  # 新しい DateTime::Locale::FromCLDR オブジェクトを設定
    $dt->set_formatter( $formatter );
    $dt->truncate( to => 'day' );   # 'year','month','week','day','hour','minute','second'

    # second, minute, hour, day, week, local_week, month, quarter,
    # year, decade, century に対応
    $dt->end_of( 'month' );
    say $dt;  # 2026-04-30T23:59:59.999999999
    $dt->start_of( 'month' );
    say $dt;  # 2026-04-01T00:00:00

    # 比較
    my @sorted = sort { $a <=> $b } @datetimes;  # オーバーロードされた <=>
    DateTime::Lite->compare( $dt1, $dt2 );       # -1, 0, 1
    DateTime::Lite->compare_ignore_floating( $dt1, $dt2 );
    $dt->is_between( $lower, $upper );

    # クラスレベルの設定
    DateTime::Lite->DefaultLocale('fr-FR');
    my $class = $dt->duration_class;  # 'DateTime::Lite::Duration'

    # 定数
    DateTime::Lite::INFINITY();        # +Inf
    DateTime::Lite::NEG_INFINITY();    # -Inf
    DateTime::Lite::NAN();             # NaN
    DateTime::Lite::MAX_NANOSECONDS(); # 1_000_000_000
    DateTime::Lite::SECONDS_PER_DAY(); # 86400

    # エラー処理
    my $dt2 = DateTime::Lite->new( %bad_args ) ||
        die( DateTime::Lite->error );
    # チェーン呼び出し:
    # 不正な呼び出しは NullObject を返すため、チェーンを安全に継続できる。
    # チェーンの最後の呼び出しの戻り値を確認すること。
    my $result = $dt->some_method->another_method ||
        die( $dt->error );

=head1 VERSION

    v0.6.8

=head1 DESCRIPTION

C<DateTime::Lite>は、L<DateTime>の軽量かつメモリ効率の高いドロップイン代替モジュールです。主な設計目標は次のとおりです。

=over 4

=item 依存関係を少なくすること

実行時の依存関係は、L<DateTime::Lite::TimeZone>(SQLiteに格納されたタイムゾーンデータを同梱し、L<DBD::SQLite>が利用できない場合はL<DateTime::TimeZone>へ自動的にフォールバック)、L<DateTime::Local...

重いL<Specio>、L<Params::ValidationCompiler>、L<Try::Tiny>、C<namespace::autoclean>は完全に排除されています。

=item メモリ使用量を抑えること

C<DateTime>は多数のモジュールを連鎖的に読み込むため、C<%INC>が大きく膨らみます。C<DateTime::Lite>は、必要なものだけを遅延読み込みすることで、これを避けています。

=item TZifバイナリから正確なタイムゾーンデータを得ること

C<DateTime::TimeZone>は、IANA OlsonのI<source>ファイル(C<africa>、C<northamerica>など)を独自のテキストパーサ(C<DateTime::TimeZone::OlsonDB>)で解析し、配布物のビルド時にタイムゾーンごとにC<.pm>ファ...

一方、C<DateTime::Lite::TimeZone>はIANAのソースファイルを公式のIANAコンパイラであるC<zic(1)>でコンパイルし、その結果得られるTZifバイナリファイルを直接読み込みます。これはL<RFC 9636|https://...

重要なのは、C<EST5EDT,M3.2.0,M11.1.0>のように、すべてのTZif v2+ファイルに埋め込まれているPOSIXフッターのTZ文字列を抽出し、SQLiteデータベースに保存している点です。

この文字列は、最後の明示的な遷移以降のすべての日付に対する、繰り返しの夏時間規則を表します。実行時には、C<DateTime::Lite::TimeZone>がIANAC<tzcode>の参照アルゴリズムをXSで実装したもã...

=item XSによるホットパスの高速化

XSレイヤーは、CPU負荷の高いすべてのカレンダー演算(C<_rd2ymd>、C<_ymd2rd>、C<_seconds_as_components>、すべてのうるう秒関連ヘルパー)を担当します。さらに、元の実装にはなかったC<_rd_to_epoch...

=item 互換性のあるAPI

公開APIは可能な限りL<DateTime>に近づけているため、C<DateTime>を使っている既存のコードは、C<DateTime::Lite>をドロップイン代替として利用できるはずです。

=item Unicode CLDR / BCP 47ロケールへの完全対応

C<DateTime>は、ロケールごとに事前生成されたC<DateTime::Locale::*>モジュールの集合に制限されています。C<DateTime::Lite>は、有効なUnicode CLDR / BCP 47ロケールタグであれば、Unicode拡張(C<-u->)、å...

    my $dt = DateTime::Lite->now( locale => 'en' );    # 単純な形式
    my $dt = DateTime::Lite->now( locale => 'en-GB' ); # 単純な形式
    # より複雑な形式にも対応
    my $dt = DateTime::Lite->now( locale => 'he-IL-u-ca-hebrew-tz-jeruslm' );
    my $dt = DateTime::Lite->now( locale => 'ja-Kana-t-it' );
    my $dt = DateTime::Lite->now( locale => 'ar-SA-u-nu-latn' );



( run in 0.775 second using v1.01-cache-2.11-cpan-0d23b851a93 )