DateTime-Lite

 view release on metacpan or  search on metacpan

README-ja-JP.md  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 );

# VERSION

    v0.6.8

# DESCRIPTION

`DateTime::Lite`は、[DateTime](https://metacpan.org/pod/DateTime)の軽量かつメモリ効率の高いドロップイン代替モジュールです。主な設計目標は次のとおりです。

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

    実行時の依存関係は、[DateTime::Lite::TimeZone](https://metacpan.org/pod/DateTime%3A%3ALite%3A%3ATimeZone)(SQLiteに格納されたタイムゾーンデータを同梱し、[DBD::SQLite](https://metacpan.org/pod/DBD%3A%3ASQLite)が利ç...

    重い[Specio](https://metacpan.org/pod/Specio)、[Params::ValidationCompiler](https://metacpan.org/pod/Params%3A%3AValidationCompiler)、[Try::Tiny](https://metacpan.org/pod/Try%3A%3ATiny)、`namespace::autoclean`は完全に排除されていã...

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

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

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

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

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

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

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

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

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

- 互換性のあるAPI

    公開APIは可能な限り[DateTime](https://metacpan.org/pod/DateTime)に近づけているため、`DateTime`を使っている既存のコードは、`DateTime::Lite`をドロップイン代替として利用できるはずです。

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

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

    ロケールデータは、[DateTime::Locale::FromCLDR](https://metacpan.org/pod/DateTime%3A%3ALocale%3A%3AFromCLDR)が[Locale::Unicode::Data](https://metacpan.org/pod/Locale%3A%3AUnicode%3A%3AData)を通じて動的に解決します。そのた...



( run in 0.918 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )