2015-07-12 18 views
13

Başka biriyle aynı ancak haftaın farklı bir ilk günü olan (yani Cumartesi yerine Pazar) bir Locale nesnesine sahip olmam gerekir.Hafta içi ilk günü özel bir Yerel Ayarı nasıl yapabilirim?

Özellikle, Pazar günü başlayan bir Arapça-Mısır yerel ayarına ihtiyacım var. Yalnızca kendi yerel ayarını değiştirmeyi destekleyen bir takvim denetimi kullanıyorum, dolayısıyla benim gereksinimim.

cevap

11

Locale nesneler haftanın ilk gününü kontrol etmiyoruz. Gautam Jose'nin Yanıta your comment göre

: Bu şu şekilde Calendar sınıfı tarafından yapılır Normalde bu sadece iyi

olurdu. Şey, kullandığım denetim, Takvim nesnelerini varsayılan yerel (uygulama kapsamı bilge), yani özel bir yerel ayarlara göre başlatmaya devam ediyor. Aslında kontrolünü mühendislik ters çalıştı ve bunun nedeni bu özel üyelerini kullanarak soruna gecikmeyi sağlamaz:

Eğer bu değiştirirseniz miras gerekmez (yani burada yardımcı olamaz miras) Java yansıma API'sini kullanarak doğrudan private üye.

Birincisi, Calendar alanı bulmak için denetim sınıfı incelemek:

public class CalendarControl { 
    private Calendar calendar; 
} 

Şimdi kullanın:

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 
} 
+2

. Özel değerleri değiştirme konusundaki yetersizliğim, soruyu ilk sırada sormam için beni zorladı. Sebebi ne olursa olsun setAccessible bir süre benim için çalışmadı. Daha sonra işe yaradı, bu yüzden yanlış bir şey yapmalıydım. Bu şimdi orijinal kontrol ile oynamama izin verecek. – mido

6

Calendar nesnesini oluşturabilir ve calender.setFirstDayOfWeek() yöntemini kullanarak ilk günü ayarlayabilirsiniz.

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()); 
+2

Normalde bu sadece iyi olurdu. Şey, kullandığım denetim, Takvim nesnelerini varsayılan yerel (uygulama kapsamı bilge), yani özel bir yerel ayarlara göre başlatmaya devam ediyor. Aslında tersine mühendislik kontrolünü denedim ve özel üyeler kullanması nedeniyle bu konuyla ilgili herhangi bir destek sağlamadı (yani: burada kaleme alınamıyor) – mido

İlgili konular