私はコードを変更せずにカレンダーを動的に変更する必要がある国際化アプリケーションを開発しています。ご存じのように、Calendar.getInstance()はグレゴリオ暦を返します.Calendar.getInstance()を呼び出すと、別のカレンダーを使用するにはどうすればよいですか。したがって、コードを変更せずにローカライズされたカレンダーを動的に変更します。Javaローカライズされたカレンダー
ベスト
私はコードを変更せずにカレンダーを動的に変更する必要がある国際化アプリケーションを開発しています。ご存じのように、Calendar.getInstance()はグレゴリオ暦を返します.Calendar.getInstance()を呼び出すと、別のカレンダーを使用するにはどうすればよいですか。したがって、コードを変更せずにローカライズされたカレンダーを動的に変更します。Javaローカライズされたカレンダー
ベスト
そうするfactoryを使用します。
public static Calendar getInstance(TimeZone zone, Locale aLocale)
あなたが(あなたが最大であるかを伝えることは本当に難しいです)別のカレンダーシステムを使用したい場合は、ICU4J Projectはあなたの友達です。
いくつかの異なるカレンダーシステムが含まれています(com.ibm.icu.utilパッケージを参照)。
// valid for desktop applications, for web you'd do it differently
ULocale arabicLocale = new ULocale("[email protected]=islamic");
Calendar calendar = Calendar.getInstance(arabicLocale);
、私はそれを助けることができますが、あなたが特定のULocale識別子を通じてカレンダーシステムを割り当てなければならないだろうと思われます。私は彼らがなぜ適切なデフォルトを設定していないのかわかりません...とにかく...
ICUはDateFormatとTimeZoneの独自の実装を提供しています。これはカレンダーのフォーマットに使用する必要があるのでしょうか? 。幸いにもその実装ではCalendar
が受け入れられるので、実際には使いやすくなります。
TimeZone currentTimeZone = TimeZone.getDefault();
DateFormat formatter = DateFormat.getDateTimeInstance(
DateFormat.DEFAULT, DateFormat.DEFAULT, arabicLocale);
formatter.setTimeZone(currentTimeZone);
String formattedDateTime = formatter.format(calendar);