1. ホーム
  2. java

[解決済み] JVMのタイムゾーンを正しく設定する方法

2022-05-03 05:03:58

質問

Javaプログラムを実行しようとしていますが、OSで定義されたタイムゾーンではなく、デフォルトのGMTタイムゾーンが使用されています。JDKのバージョンは1.5で、OSはWindows Server Enterprise (2007)です。

Windowsではセントラルタイムゾーンが指定されていますが、以下のプログラムを実行すると、GMT時間が表示されます。

import java.util.Calendar;

public class DateTest
{
    public static void main(String[] args)
    {
        Calendar now = Calendar.getInstance();
        System.out.println(now.getTimeZone());
        System.out.println(now.getTime());
    }
}

以下はその出力です。

sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010

なお、私はアプリケーションからタイムゾーンを設定したいわけではありません。JVMが使用するタイムゾーンは、OSで指定されたものである必要があります。(私は、JDKのバージョン1.4とMicrosoft Server 2003を持つ他のサーバーで、この問題を発見していません)。

何かご意見がありましたら、よろしくお願いします。

解決方法は?

JVMにこのパラメータを渡すことができます。

-Duser.timezone

例えば

-Duser.timezone=Europe/Sofia

で、これでうまくいくはずです。 Linuxでは、環境変数TZを設定することでもトリックを実行できます。