DateTime-Lite

 view release on metacpan or  search on metacpan

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


=item C<+09:00>、C<-0500>のような固定オフセット文字列。

=item 特別な名前C<UTC>、C<floating>、C<local>。

C<local>という名前は、外部モジュールを必要とせずに、システムのローカルタイムゾーンを自動判定するようC<DateTime::Lite::TimeZone>に指示します。判定戦略はOS固有で、L<$^O|perlvar/"$^O">に依å...

=over 8

=item B<Linux、macOS (darwin)、FreeBSD、OpenBSD、NetBSD、Solaris、AIX、HP-UX、OS/2、Cygwin>

次の順に試します。

=over 12

=item * C<$ENV{TZ}>

=item * C</etc/localtime>のsymlink先、またはC</usr/share/zoneinfo>に対するバイナリ一致

=item * C</etc/timezone>(Debian/Ubuntu)

=item * C<TZ=>行を含むC</etc/TIMEZONE>(Solaris, HP-UX)

=item * C<ZONE=>またはC<TIMEZONE=>行を含むC</etc/sysconfig/clock>(RedHat/CentOS)

=item * C<TZ=>行を含むC</etc/default/init>(古いUnix)

=back

=item B<Windows (MSWin32、NetWare)>

まずC<$ENV{TZ}>を試し、その後Windows Registry(C<SYSTEM/CurrentControlSet/Control/TimeZoneInformation>)からタイムゾーン名を読み取り、CLDRのC<windowsZones.xml>テーブルを使ってIANA名へマッピングします。
C<Win32::TieRegistry>が必要です(CPANで利用可能ですが、必須依存ではありません)。

=item B<Android>

C<$ENV{TZ}>、次にC<getprop persist.sys.timezone>を試し、その後C<UTC>へフォールバックします。

=item B<VMS>

環境変数C<TZ>、C<SYS$TIMEZONE_RULE>、C<SYS$TIMEZONE_NAME>、C<UCX$TZ>、C<TCPIP$TZ>を確認します。

=item B<Symbian、EPOC、MS-DOS、Mac OS 9以前>

C<$ENV{TZ}>のみを確認します。

=back

ローカルタイムゾーンを判定できない場合は、エラーが設定され、スカラコンテキストではC<undef>、リストコンテキストでは空リストが返されます。チェーン呼び出し(オブジェクトコãƒ...

=item C<latitude>およびC<longitude>引数による座標。

C<name>の代わりに10進度の座標を渡すことで、C<DateTime::Lite::TimeZone>に最も近いIANAタイムゾーンを自動解決させることができます。

    my $tz = DateTime::Lite::TimeZone->new(
        latitude  => 35.658558,
        longitude => 139.745504,
    );
    say $tz->name;  # Asia/Tokyo

解決にはIANAC<zone1970.tab>ファイルに保存された参照座標(正規ゾーンごとに1つの代表点)を使用し、L<haversine great-circle distance|https://en.wikipedia.org/wiki/Haversine_formula>により最も近いゾーンをæ...

C<latitude>はC<-90>からC<90>、C<longitude>はC<-180>からC<180>の範囲でなければなりません。値が範囲外である場合、またはデータベース内に座標付きゾーンが見つからない場合、L<エラーオブジェ...

haversine公式は、データベースがC<-DSQLITE_ENABLE_MATH_FUNCTIONS>付きでコンパイルされている場合、SQLite内で計算されます(SQLite version E<gt>= 3.35.0、L<2021å¹´3月リリース|https://sqlite.org/changes.html>)ã€...

古いシステム、または数学関数が存在しないビルドでは、必要な関数(C<sqrt>、C<sin>、C<cos>、C<asin>)が、初回使用時にL<DBD::SQLite/sqlite_create_function>経由でPerl UDF(User Defined Functions)としてè...

検出はバージョンを考慮して行われます。つまり:

=over 8

=item * SQLite version E<gt>= 3.35.0では、UDFを登録する前に特殊なsystem table C<pragma_function_list>でC<sqrt>を問い合わせ、ネイティブ関数を優先的に使用することを確認します。

=item * SQLite version E<lt>3.35.0では、数学関数がまだ存在しないため、C<pragma_function_list>を問い合わせずにUDFを直接登録します。

=item * SQLite version E<lt>3.16.0では、C<pragma_function_list>はtable-valued functionとして利用できないため、UDFを直接登録します。

=back

UDFはSQLite version E<gt>= 3.0.0のすべてで利用できます。

古いシステムでSQLite 3.31.1が同梱されている場合も、必要な関数(C<sqrt>、C<sin>、C<cos>、C<asin>)は初回使用時にL<DBD::SQLite/sqlite_create_function>経由でPerl UDF(User Defined Functions)として自動登録...

=back

真の値を持つbooleanオプションC<use_cache_mem>は、この呼び出しに対してプロセスレベルのメモリキャッシュを有効化します。設定されると、同じゾーン名(またはそのエイリアス)での以å¾...

    # これらは最初の構築後、キャッシュにヒットします:
    my $tz = DateTime::Lite::TimeZone->new(
        name          => 'America/New_York',
        use_cache_mem => 1,
    );

真の値を持つbooleanオプションC<extended>は、名前が有効なIANAタイムゾーン名として認識されない場合に、略称解決をフォールバックとして有効化します。これは、呼び出し元が外部ソース...

C<extended>が設定され、名前がIANAタイムゾーンとして未知の場合、C<new>は内部的にC<extended>オプションを真にしてC<resolve_abbreviation>を呼び出します。そして単一の曖昧でない候補が見つかっ...

    my $tz = DateTime::Lite::TimeZone->new( name => 'JST', extended => 1 );
    say $tz->name;  # Asia/Tokyo

成功時には新しいオブジェクトを返します。エラー時にはC<error()>によりL<例外オブジェクト|DateTime::Lite::Exception>を設定し、スカラコンテキストではC<undef>、リストコンテキストでは空リã‚...

=head1 メモリキャッシュ

デフォルトでは、L</new>を呼び出すたびにSQLiteクエリを使って新しいオブジェクトを構築します。同じゾーン名でC<DateTime::Lite::TimeZone>オブジェクトを繰り返し構築するアプリケーション向...

B<Layer 1 - オブジェクトキャッシュ>:有効化されている場合、同じゾーン名に対する2回目以降の呼び出しは、データベースを完全に迂回し、元のオブジェクトをハッシュから直接返しまã...

B<Layer 2 - spanキャッシュ>:キャッシュ済みの各TimeZoneオブジェクトは、直近に一致したUTCおよびローカル時刻spanを保存します。C<offset_for_datetime>およびC<offset_for_local_datetime>の呼び出しでは...

B<Layer 3 - POSIX footerキャッシュ>:現在の日付が繰り返しDST規則(POSIX TZ footer文字列)によって管理されるゾーンでは、footer計算の結果が暦日単位でキャッシュされます。DST遷移は年に2回ç™...

これら3層により、C<< DateTime::Lite->new( time_zone => 'America/New_York' ) >>の呼び出しごとのコストは約430 µsから約25 µsまで低下し、C<DateTime>と同等になります。

キャッシュエントリは、L</new>に渡された名前と、エイリアス解決後の正規名をキーにします。そのため、C<US/Eastern>とC<America/New_York>は同じキャッシュ済みオブジェクトへ対応します。

通常の使用では、キャッシュ済みオブジェクトは不変です。すべてのpublic accessorは読み取り専用なので、複数の呼び出し元でオブジェクトを共有しても安全です。

=head2 enable_mem_cache



( run in 0.748 second using v1.01-cache-2.11-cpan-df04353d9ac )