8
  1. System.setProperty("user.timezone", "アメリカ/シカゴ");
  2. TimeZone.setDefault(TimeZone.getTimeZone("アメリカ/シカゴ"));

2つの違いは何ですか?タイムゾーンの設定に適している/推奨されるのはどれですか?

4

2 に答える 2

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;て返されます。

于 2012-08-10T20:22:42.407 に答える