我正在开发一个国际化的应用程序,我需要在不更改代码的情况下动态更改我的日历。如您所知,Calendar.getInstance()返回一个公历,当我调用Calendar.getInstance()时,如何使用不同的日历。因此,我在不更改代码的情况下动态更改本地化日历。
最佳
答案 0 :(得分:2)
使用factory执行此操作:
public static Calendar getInstance(TimeZone zone, Locale aLocale)
答案 1 :(得分:0)
如果您想使用不同的日历系统(很难说出您的目标),那么ICU4J Project就是您的朋友。
它包含几个不同的日历系统(请参阅com.ibm.icu.util包)。
要使用不同的日历系统,只需实例化有效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);