2013-05-13 6 views
5

Mam mały problem, opracowuję aplikację i muszę zmienić dzień rozpoczęcia tygodnia z poniedziałku na inny (czwartek, sobota). jest to możliwe w Androidzie, muszę obliczyć początek do tygodnia i jego koniec znając datę. (Tydzień zaczyna się od czwartku jako przykład)Kalendarz Androida: Zmiana dnia rozpoczęcia tygodnia

Uwaga: jestem dopiero początkującym programistą dla Androida. tutaj jest mój kod SimpleDateFormat dateformate = new SimpleDateFormat ("dd/MM");

// get today and clear time of day 
Calendar cal = Calendar.getInstance(); 

// get start of this week in milliseconds 
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); 
cal.add(Calendar.DAY_OF_YEAR, 7*(WeekIndex-1)); 
result = dateformate.format(cal.getTime()); 

cal.add(Calendar.DAY_OF_YEAR, 6); 

result=result+" - " + dateformate.format(cal.getTime()); 

używając powyższego kodu otrzymuję wynik, ale z poniedziałku jako gwiazda tygodnia.

Uwaga: Nie mogę dodać dzień do wyniku, ponieważ zmiany indeksów tydzień z zmiana to zaczynają

+1

„muszę zmienić dzień rozpoczęcia tygodnia "- w * co *? 'CalendarView'? Coś innego? – CommonsWare

+0

dodaj swój kod. – Blackbelt

+0

sprawdź teraz mój wpis i przepraszam za zły angielski –

Odpowiedz

20

dni kalendarzowe mają wartości 1-7 dni do niedzieli do soboty. getFirstDayOfWeek zwraca jedną z tych wartości (zwykle z poniedziałku lub niedzieli) w zależności od użytej wartości Locale. Calendar.getInstance używa domyślnie Locale na podstawie ustawień telefonu, który w twoim przypadku ma poniedziałek jako pierwszy dzień tygodnia.

Rozwiązaniem byłoby użyć innych Locale:

Calendar.getInstance(Locale.US).getFirstDayOfWeek() 

powróci 1, co jest wartością Calendar.SUNDAY

Innym rozwiązaniem byłoby użycie wybranym dniu wartości tygodnia jak

cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

Problem polega na tym, że Calendar używa wewnętrznej wartości pierwszego dnia tygodnia w set. Przykład:

Calendar mondayFirst = Calendar.getInstance(Locale.GERMANY); //Locale that has Monday as first day of week 
mondayFirst.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
log(DateUtils.formatDateTime(context, mondayFirst.getTimeInMillis(), 0)); 
//prints "May 19" when runned on May 13 

Calendar sundayFirst = Calendar.getInstance(Locale.US); //Locale that has Sunday as first day of week 
sundayFirst.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
log(DateUtils.formatDateTime(context, sundayFirst.getTimeInMillis(), 0)); 
//prints "May 12" when runned on May 13 

Jeśli nie chcesz używać Locale albo trzeba drugi dzień jako pierwszy dzień tygodnia, może być najlepiej obliczyć początek tygodnia na własną rękę.

0
public int getWeekdayOfMonth(int year, int month){ 
    Calendar cal = Calendar.getInstance(); 
    cal.set(year, month-1, 1); 
    dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1; 
    return dayOfWeek; 
} 

dzień powszedni = getWeekdayOfMonth();

int day = (weekday - firstweek) < 0 ? (7 - (firstweek - weekday)) : (weekday - firstweek); 

„firstweek” oznacza co dzień startu z was chce

następnie można obliczyć pierwszy dzień należy show.If masz prostą metodę, proszę powiedz nam. thks

3
GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 0); 

zmieniającym wartość 0 - rozpoczyna dzień od poniedziałku zmieniając wartość 1 - zaczyna dzień od niedzieli i tak dalej ..

nadzieję, że to pomaga i działa :)

+0

Działa dobrze, dzięki +1 –