2013-05-13 23 views
5

ho un piccolo problema, sto sviluppando un'applicazione, e ho bisogno di cambiare il giorno di inizio della settimana da lunedì ad un altro (giovedì, di sabato). questo è possibile in Android, ho bisogno di calcolare l'inizio alla settimana e la sua fine conoscendo la data. (la settimana inizia ad esempio giovedì)Calendario Android: modifica del giorno di inizio della settimana

Nota: sono solo un principiante nello sviluppo di Android. questo è il mio codice 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()); 

utilizzando il codice sopra riportato per ottenere il risultato ma con lunedì come stella della settimana.

Nota: Non posso aggiungere giorno per il risultato perché le variazioni dell'indice settimana con il mutare del suo inizio

+1

"Ho bisogno per cambiare il giorno di inizio della settimana "- in * cosa *? 'CalendarView'? Qualcos'altro? – CommonsWare

+0

inserisci il tuo codice. – Blackbelt

+0

controlla il mio post ora, e scusami per il male inglese –

risposta

20

Calendario giorni avere valori 1-7 per i giorni Domenica-Sabato. getFirstDayOfWeek restituisce uno di questi valori (in genere il lunedì o la domenica) a seconda dell'uso Locale. Calendar.getInstance utilizza l'impostazione predefinita Locale depening sulle impostazioni del telefono, che nel tuo caso ha lunedì come primo giorno della settimana.

Una soluzione potrebbe essere quella di utilizzare altri Locale:

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

sarebbe tornare 1, che è il valore di Calendar.SUNDAY

altra soluzione sarebbe quella di utilizzare giorno scelto di valore settimana come

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

Il problema è, Calendar utilizza il valore interno primo giorno della settimana in set pure. Esempio:

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 

Se non si desidera utilizzare Locale o avete bisogno di altro giorno come il primo giorno della settimana, può essere meglio per calcolare all'inizio della settimana da soli.

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; 
} 

giorno feriale = getWeekdayOfMonth();

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

"FirstWeek" significa ciò che il giorno di inizio di voi vuole

allora si può calcolare il primo giorno si dovrebbe show.If avete metodo semplice, ci informi. thks

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

cambiando il valore 0 - inizia i giorni dal Lunedi modificando il valore 1 - inizia giorno da domenica e così via ..

speranza che questo aiuta e funziona :)

+0

Funzionante bene, Grazie +1 –

Problemi correlati