我需要一个Locale
对象与另一个对象完全相同但是周的第一天不同(即:星期日而不是星期六)。
具体来说,我需要一个从周日开始的阿拉伯语 - 埃及语言环境。我正在使用仅支持更改其语言环境的日历控件,因此我的要求。
答案 0 :(得分:11)
Locale
个对象无法控制一周的第一天。
这是由Calendar
类以下列方式完成的:
Locale locale = Locale.forLanguageTag("ar-EG");
Calendar calendar = Calendar.getInstance(locale);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
根据your comment关于Gautam Jose的回答:
通常这样就好了。事实上,我正在使用的控件根据默认语言环境(应用程序范围明智)继续实例化Calendar对象,因此是自定义语言环境。我实际上尝试对控件进行逆向工程,并且由于它使用私有成员而没有提供问题的余地(即:继承它在这里无能为力)
如果使用Java反射API直接更改这些private
成员,则无需继承。
首先,检查控件的类以找到Calendar
字段:
public class CalendarControl {
private Calendar calendar;
}
现在使用:
CalendarControl control; // The instance to manipulate
try {
Field field = control.getClass().getDeclaredField("calendar");
field.setAccessible(true);
field.set(control, calendar); // Pass the new object we created at top of this answer
} catch (Exception ex) {
// You must catch NoSuchFieldException and IllegalAccessException here
}
答案 1 :(得分:6)
您可以使用Calendar
方法创建calender.setFirstDayOfWeek()
对象并设置第一天。
Locale locale = new Locale("ar-EG", "EG");
TimeZone timeZone = TimeZone.getTimeZone("Egypt");
Calendar calendar = GregorianCalendar.getInstance(locale);
Calendar calendar2 = GregorianCalendar.getInstance(locale);
calendar2.setFirstDayOfWeek(0);
System.out.println("Calender locale: " + locale + "\nTimeZone: "
+ timeZone.getDisplayName(locale) + "FirstDayOfTheWeek:"
+ calendar.getFirstDayOfWeek() + "\nCalender2 locale: "
+ locale + "\nTimeZone: " + timeZone.getDisplayName(locale)
+ "FirstDayOfTheWeek:" + calendar2.getFirstDayOfWeek());