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つのステップに従います。

  • TZupdaterによるタイムゾーンの確認: Javaのタイムゾーン更新ツールはtzupdaterと呼ばれています。 使用しているJREのタイムゾーン・データベース・バージョンを判別するには、このツールを次のように実行します。

    java -jar tzupdater.jar -V
    

    tzupdaterツールの実行による標準的な出力を次に示します。

    tzupdater version 1.3.33-b01JRE time zone data version: tzdata2010iEmbedded time zone data version: tzdata2010l
    

    tzupdaterツールは、http://www.oracle.com/technetwork/jp/java/javase/tzupdater-readme-136440.htmlというWebページからダウンロードできます。

  • ZoneInfoMappingsファイルの確認: tzupdaterツールがない場合でも、<java-home>/lib/zi/ZoneInfoMappingsファイルのヘッダーを調べることでバージョンをすぐに確認できます。 このデータは、Javaに固有のバイナリ・フォーマットで保存されます。 Oracle Solaris、LinuxおよびMac OS Xオペレーティング・システムでは、8進数のダンプ・コマンドを使用してこのファイルのヘッダーを調べることができます。

    例8-1に、8進数ダンプ・コマンド形式を示します。

    例8-1 8進数ダンプ・コマンド形式

    /usr/bin/od -c -j 11 -N 11 <java-home>/lib/zi/ZoneInfoMappings
    

    例8-2に、このようなダンプ・コマンドの一般的な結果を示します。

    例8-2 8進数ダンプ・コマンドの結果

    /usr/bin/od -c -j 11 -N 11 /farfaraway/jdks/jdk1.6.0_21/jre/lib/zi/ZoneInfoMappings0000000   t   z   d   a   t   a   2   0   1   0   i0000013
    

    例8-3では、このJREに埋め込まれているタイムゾーン・データのバージョンはtzdata2010iであることを示しています。

    Microsoft Windowsでは、findstrコマンドを使用してZoneInfoMappingsファイルを調べることができます。 次に例を示します。

    例8-3 JREに埋め込まれているタイムゾーン・データ・バージョン

    findstr tzdata <java-home>\lib\zi\ZoneInfoMappings
    

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

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

例8-4 メッセージとともに終了するtzupdater

$ java -jar tzupdater.jar -Vtzupdater version 1.3.39-b01JRE time zone data version: tzdata2009iThere's no tzdata available for this Java runtime.
$ java -jar tzupdater.jar -u
There's no tzdata available for this Java runtime.

考えられる原因は、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 HP_UX環境でのtzupdaterの実行

root@my_server:/opt/java6/bin> uname -a
HP-UX my_server B.11.23 U ia64 1114591084 unlimited-user license
root@my_server:/opt/java6/bin> ./java -version
java version "1.6.0.05"
Java(TM) SE Runtime Environment (build 1.6.0.05-jinteg_14_oct_2009_01_44-b00)
Java HotSpot(TM) Server VM (build 14.2-b01-jre1.6.0.05-rc5, mixed mode)
root@my_server:/opt/java6/bin> ./java -jar tzupdater.jar -v -u
java.home: /opt/java6/jre
java.vendor: Hewlett-Packard Co.
java.version: 1.6.0.05
JRE time zone data version: tzdata2009i
There's no tzdata available for this Java runtime.

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

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

目次      

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