如何使用自定义的一周的第一天构造区域设置?
我需要有一个与另一个对象完全相同的对象,但具有不同的星期一天(即:星期日而不是星期六)。Locale
具体来说,我需要一个从星期日开始的阿拉伯语-埃及区域设置。我正在使用仅支持更改其区域设置的日历控件,因此我的需求。
我需要有一个与另一个对象完全相同的对象,但具有不同的星期一天(即:星期日而不是星期六)。Locale
具体来说,我需要一个从星期日开始的阿拉伯语-埃及区域设置。我正在使用仅支持更改其区域设置的日历控件,因此我的需求。
区域设置
对象不控制一周的第一天。这由 Calendar
类按以下方式完成:
Locale locale = Locale.forLanguageTag("ar-EG");
Calendar calendar = Calendar.getInstance(locale);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
根据你对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
}
您可以使用方法创建对象并设置第一天。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());