Java Platform, Standard Editionトラブルシューティング・ガイド
目次      

8.1 ネイティブ・タイムゾーン情報およびJRE

JREでは、デフォルト・タイムゾーンを判別するためにネイティブ・タイムゾーン情報を読み取ります。たとえば、Windowsでは、JREはデフォルト・タイムゾーンを判別するためにレジストリを問い合わせます。

しかし、JREでは独自のタイムゾーン・データベースも保持しています。これにはクロスプラットフォーム・サポートが備わっていますが、その理由は様々なオペレーティング・システムのAPIがJava APIをサポートするのに不十分であるからです。Javaタイムゾーン・データベースは、タイムゾーンIDをサポートし、JREがサポートしているすべてのタイムゾーンの夏時間ルールを決めます。Javaタイムゾーン・データベースは、<install_dir>/jre/lib/ziにあります。Javaタイムゾーン・データベースの更新には、tzupdaterツールを使用できます。

オペレーティング・システムがシステム時間をJREに配信できるように、JREへの変更をオペレーティング・システムごとに行う必要があります。その後、Javaアプリケーションが日付と時間に関連したコンストラクタを呼び出してシステム日付を要求すると、システム時間が返されます。

そのようなコンストラクタの例を次に示します。


java.util.Date()
java.util.GregorianCalendar()

日付と時間に関連したコンストラクタには、次が含まれています。


System.currentTimeMillis()
System.nanoTime()

正しいシステム時間が必ずJREに配信されるようにするには、オペレーティング・システム固有のパッチが必要になる場合があります。

次の項では、タイムゾーンの設定のトラブルシューティング手法について説明します。

8.1.1 使用中のタイムゾーン・データ・バージョンの判別

Oracle提供のJREに付属しているタイムゾーン・データベースのバージョンは、リリース・ノートに記載されています。ただし、tzupdaterツールを使用してJREにパッチを適用した場合は、実際のバージョンがそこに記載されているバージョンと異なることがあります。

使用しているJREの現在のタイムゾーン・データ・バージョンを判別するには、Versionオプションを指定してtzupdaterツールを実行するか、ZoneInfoMappingsファイルのヘッダーを調べます。

タイムゾーン・データを確認するには、これらの2つの手順に従います。

8.1.2 Tzupdaterの問題のトラブルシューティング

tzupdaterの実行時に、それが「このJavaランタイムで使用できるタイムゾーン・データはありません」というメッセージを表示して終了することがときどきあります。例8-4に、2つの例を示します。

考えられる原因は、Oracle提供でないJREを使用していることです。Oracleが提供するJREは、Oracle Solaris (x86、x64、SPARC)、Linux (x86、x64、ARM)、Microsoft Windows (x86、x64)、およびMac OS X (x64)用です。これらのJREのjava.vendorプロパティ値はSun Microsystems Inc.、Oracle Corporation、またはBEA Systems, Inc.です。Oracleでは、それ以外のプラットフォーム用のJREを提供していません。

java -versionコマンドを実行した場合の出力は、JREの実際のベンダーを判断するのに十分な情報を提供しません。しかし、-vオプションを指定してtzupdaterを更新モードで実行すると、java.vendorプロパティが出力されます。例8-5に、環境がHewlett PackardのHP_UXである場合のtzupdaterの実行の試みを示します。

例8-5では、java.vendorがHewlett-Packard Co.に設定されています。tzupdaterを使用して更新を試みているJREはOracleでサポートされていません。

考えられる解決方法は、使用しているJREベンダーのWebサイトを参照して、使用可能なタイムゾーン更新ツールがあるかどうかを確認することです。たとえば、Hewlett-Packardバージョンのtzupdaterツールを参照します。

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.