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で指定されているものでなければなりません。 (バージョン1.4のJDKおよびMicrosoft Server 2003を持つ他のサーバーでこの問題は見つかりません)。
ご意見をいただければ幸いです。
JVMにこのパラメーターを渡すことができます
-Duser.timezone
例えば
-Duser.timezone=Europe/Sofia
これでうまくいくはずです。環境変数TZを設定することは、Linuxでもうまくいきます。
次のコードを使用して、コードにデフォルトのタイムゾーンを設定することもできます。
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
あなたへ
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));
上記の受け入れられた答え:
-Duser.timezone="Europe/Sofia"
私のために正確に動作しませんでした。パラメータの周りに引用符がない場合にのみ、タイムゾーンを正常に変更できました。
-Duser.timezone=Europe/Sofia
Windows 7およびJDK6では、-Duser.timezone="Europe/Sofia"
を Java_TOOL_OPTIONS "My computer => Properties => Advanced System Settings => Environment Variables"にあるシステム変数に追加する必要がありました。
Java_TOOL_OPTIONS
に他のプロパティセットが既にある場合は、スペースを追加してからプロパティ文字列を挿入します。
Maven を使用している場合:
mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."
私が考えていない2つのオプションは、他の回答で説明されていました。
JVMのデフォルトのタイムゾーンを設定するために何をするにしても、他の人がそれを異なる方法で設定しないようにすることは非常に困難です。プログラムの別の部分または同じJVMで実行されている別のプログラムから予告なしにいつでも設定できます。したがって、タイムオペレーションでは、どのタイムゾーンを使用するかを明示的に指定し、JVM設定とは無関係に何が得られるかを常に把握できます。例:
System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));
出力例:
2018-10-11T14:59:16.742020 + 05:00 [アジア/ドゥシャンベ]
多くの目的のために、以下は好ましい方法ではなく、間違いなく誤用される可能性があります。 「スローアウェイ」プログラムの場合、私はそれが実用的であると感じることがあります。 Java内からシステムプロパティを設定することもできます。
System.setProperty("user.timezone", "Australia/Tasmania");
System.out.println(ZonedDateTime.now());
これはちょうど印刷されました:
2018-10-11T21:03:12.218959 + 11:00 [オーストラリア/タスマニア]
渡す文字列の検証が必要な場合は、次を使用します。
System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());
Win7では、正しいタイムゾーンをJREのパラメーターとして設定する場合、パスdeployment.properties
に保存されているファイルc:\users\%username%\appdata\locallow\Sun\Java\deployment
を編集して、文字列deployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zone