Java локализованный календарь - PullRequest
2 голосов
/ 14 августа 2011

Я разрабатываю интернационализированное приложение, в котором мне нужно динамически менять свой календарь без изменения кода.Как вы знаете, Calendar.getInstance () возвращает григорианский календарь, как я могу использовать другой календарь, когда я вызываю Calendar.getInstance ().Итак, я динамически меняю свой локализованный календарь без изменения кода.

Best

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Используйте фабрику для этого:

public static Calendar getInstance(TimeZone zone, Locale aLocale)
0 голосов
/ 14 августа 2011

Если вы хотите использовать другую календарную систему (действительно трудно сказать, чем вы занимаетесь), тогда ICU4J Project - ваш друг.
Он содержит несколько различных календарных систем (см. Пакет com.ibm.icu.util ).

Чтобы использовать другую систему календаря, просто создайте экземпляр Calendar с допустимым значением ULocale , и все готово:

// valid for desktop applications, for web you'd do it differently
ULocale arabicLocale = new ULocale("ar_SA@calendar=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);
...