私はこの奇妙な問題を抱えています。ロケールを使用してカレンダーを作成すると、TimeZoneはローカルのカレンダーに戻ります
public void start(Locale locale){
String s = locale.getDisplayName();
System.err.println(s);
Calendar c = new GregorianCalendar(locale);
System.err.println(c.getTimeZone());
}
そしてこれは出力です:
español (Argentina)
Sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here....
特定のロケールから適切な時刻を取得するにはどうすればよいですか?
簡単に言えば、それはできません。
長い答え:「ロケールに適したタイムゾーン」などはありません。これは、複数のタイムゾーンを持つ国がいくつかあるためです(たとえば、米国)。タイムゾーンは別の概念です。
とにかく、あなたはあなたの問題を解決しようとしています。 Webアプリケーションを作成していて、タイムゾーンがサーバーのデフォルトに戻っていることがわかります。それは典型的な状況です。 Locale.getDefault()
とTimeZone.getDefault()
はどちらもサーバー関連の情報を返します。 JVMには、「適切な」タイムゾーンを知る方法がありません。それで、あなたはそれについて何ができますか?
DateFormat
インスタンスに割り当てると、タイムゾーンが自動的に変換されます。これらの3つの選択肢から、私は常に1番を選びます。タイムゾーン情報をユーザープロファイルに入力することで、現在のWebブラウザーなどに関係なく、ユーザーの優先タイムゾーンが何であるかが確実にわかります。一部の国のユーザーは、他の国を訪問しているときにアプリケーションを使用したいと思うかもしれません...