- System.setProperty("user.timezone", "アメリカ/シカゴ");
- TimeZone.setDefault(TimeZone.getTimeZone("アメリカ/シカゴ"));
2つの違いは何ですか?タイムゾーンの設定に適している/推奨されるのはどれですか?
コードを見ると、違いは基本的にTimeZoneのデフォルトがいつ設定されるかということです-
最初のケースでは、TimeZoneクラスへの最初の呼び出しが行われたときにデフォルトが有効になります(基本的に遅延)。たとえばTimeZone.getDefault()
、この時点でTimeZone.setDefault
が呼び出され、user.timezone
が検索され、デフォルトが設定されます。
2番目のシナリオでは、デフォルトが熱心に設定されています-明示的に呼び出すとTimeZone.setDefault
それが唯一の違いだと思います。どちらも実際にはうまくいくはずです。
更新
これはjava.util.TimeZone
クラスのコードです
TimeZone.getDefault()の最初の呼び出しには、最初のポイントをカバーするこのフローがあります。
TimeZone.getDefault()
-> TimeZone.setDefaultZone() (lookup "user.timezone" , set class variable and return timezone)
-> return defaulttimezone
次回getDefault()が呼び出されると、クラス変数が返されます。
TimeZone.setDefault(timeZone)の場合、クラスレベル変数defaultTimeZone
が設定され
defaultTimeZone = zone;
て返されます。