我有一个java程序,用户可以从复选框中选择他想要的语言环境。为了填充此复选框,我使用Calendar.getAvailableLocales()方法。问题是这个方法返回使用非Gregorian日期的语言环境,这会导致我的程序中只支持格里高利日期(ISO)的问题。两个例子是日本(日本,jP)语言环境和泰语(泰国,TH)语言环境。我不希望这些类型的语言环境出现在程序中。如何过滤列表,以便复选框中只有ISO日历格式的区域设置?感谢。
编辑: 好。这是我使用的JLocaleChooser组合框的代码:
locales = Calendar.getAvailableLocales();
localeCount = locales.length;
for (int i = 0; i < localeCount; i++) {
if (locales[i].getCountry().length() > 0) {
addItem(locales[i].getDisplayName());
}
}
之后,我根据用户选择设置系统的语言环境:
myLocale2 = theJLocaleChooser.getLocale();
Locale.setDefault(myLocale2);
如果用户选择日语(日本)语言环境,那么一切都很好。如果他/她选择日语(日本,JP)语言环境,我的程序不会执行它应该执行的操作。例如,在程序的某个地方,我得到当前月份并使用sql语句中的信息:
Calendar cal0 = Calendar.getInstance();
int month1 = cal0.get(Calendar.MONTH);
month1++; //since 0 is january
int year1 = cal0.get(Calendar.YEAR);
connect.query = "SELECT name1, name2 FROM table1 WHERE MONTH(date) = " + month1 + " AND YEAR(date) = " + year1;
如果用户选择日语(日本,JP),则此sql查询返回空数据集,但如果用户选择日语(日本)语言环境,则返回正确的数据集。原因是如果我使用日语(日本,JP)语言环境,则year1变量的值为26(我使用了println命令)但是如果我使用包括日语在内的其他语言环境(2014年,它应该是)一个。因此,我需要使用&#34;常规&#34;年(2012年,2013年,...),而非其他年份(例如伊斯兰教的Hijra)。
答案 0 :(得分:2)
您只需检查Calendar.getInstance(Locale)
是否返回GregorianCalendar
:
for (Locale locale : Calendar.getAvailableLocales()) {
if (locale.getCountry().length() > 0
&& Calendar.getInstance(locale) instanceof GregorianCalendar) {
addItem(locale.getDisplayName());
}
}