2011-08-14 53 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還提供了自己的實施DateFormat以及TimeZone恐怕,這是你應該用什麼來格式化日曆。幸運的是,他們的實施接受Calendar,所以它實際上更容易使用:

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