我正在開發一個國際化的應用程序,我需要在不更改代碼的情況下動態更改日曆。如您所知,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包)。
要使用不同的日曆系統,只需實例化日曆與有效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);