Java本地化日历

时间:2011-08-14 14:45:21

标签: java internationalization calendar

我正在开发一个国际化的应用程序,我需要在不更改代码的情况下动态更改我的日历。如您所知,Calendar.getInstance()返回一个公历,当我调用Calendar.getInstance()时,如何使用不同的日历。因此,我在不更改代码的情况下动态更改本地化日历。

最佳

2 个答案:

答案 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);
相关问题