2011-08-14 13 views
2

私はコードを変更せずにカレンダーを動的に変更する必要がある国際化アプリケーションを開発しています。ご存じのように、Calendar.getInstance()はグレゴリオ暦を返します.Calendar.getInstance()を呼び出すと、別のカレンダーを使用するにはどうすればよいですか。したがって、コードを変更せずにローカライズされたカレンダーを動的に変更します。Javaローカライズされたカレンダー

ベスト

答えて

2

そうするfactoryを使用します。

public static Calendar getInstance(TimeZone zone, Locale aLocale) 
0

あなたが(あなたが最大であるかを伝えることは本当に難しいです)別のカレンダーシステムを使用したい場合は、ICU4J Projectはあなたの友達です。
いくつかの異なるカレンダーシステムが含まれています(com.ibm.icu.utilパッケージを参照)。

だけ有効な ULocaleでカレンダーをインスタンス化し、別のカレンダーシステムを使用するには、あなたがすべて完了している:残念ながら

// 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はDateFormatTimeZoneの独自の実装を提供しています。これはカレンダーのフォーマットに使用する必要があるのでしょうか? 。幸いにもその実装ではCalendarが受け入れられるので、実際には使いやすくなります。

TimeZone currentTimeZone = TimeZone.getDefault(); 
DateFormat formatter = DateFormat.getDateTimeInstance(
    DateFormat.DEFAULT, DateFormat.DEFAULT, arabicLocale); 
formatter.setTimeZone(currentTimeZone); 
String formattedDateTime = formatter.format(calendar);