L'attributo WEEK_OF_YEAR del Le lezioni di calendario possono essere utili per te. Rif: Calendar class
Creare una nuova data che sarà il primo giorno del mese, un po '. Prendi la settimana dell'anno per questo giorno, diciamo che hai un valore iniziale.
Creare una nuova data che sarà l'ultimo giorno del mese dato. Ottieni la settimana dell'anno per questo giorno, quindi ora hai il valore finale.
Ora END - Start + 1 dovrebbe essere quello che si desidera.
Potrebbe essere necessario gestire alcuni casi angolo quando la settimana si sovrappone ad un altro anno o simili. Ma penso che una volta capito bene, puoi farlo con una logica semplice.
Ecco un semplice esempio di codice. Penso che tu possa farlo funzionare e passare quello che vuoi.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
int start = cal.get(Calendar.WEEK_OF_YEAR);
Log.d("BLA BLA", "Value is " + start);
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 28);
int end = cal.get(Calendar.WEEK_OF_YEAR);
//Above line will not work for December Month, use following line for this
int end = isDecember?53:cal.get(Calendar.WEEK_OF_YEAR);
Log.d("BLA BLA", "Value is " + end);
Log.d("BLA BLA", "Num weeks:: " + (end - start +1));
Per angolo caso:
caso d'angolo si verifica solo per il mese di Januaray (Eg gennaio 2010, gennaio 2000), in questi casi la maggior parte dei giorni fanno parte della scorsa settimana del l'anno precedente in modo che il valore iniziale sarà 52 e il valore finale sarà 5. in questo caso controllare se,
if(start > end) {
numweeks = end + 1;
}
PS: Metterlo a diversi ingressi di test che avete ottenuto. Fammi sapere se posso migliorare su di esso una volta trovato alcun difetto.
e anche soluzione molto più semplice:
Calendar cal = Calendar.getInstance();
for(int i = 0 ; i < 11;i++){
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, i);
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
Log.d("LOG","max week number" + maxWeeknumber);
}
01-22 01:49:03.591: D/LOG(573): max week number5
01-22 01:49:03.602: D/LOG(573): max week number5
01-22 01:49:03.602: D/LOG(573): max week number6
01-22 01:49:03.671: D/LOG(573): max week number5
01-22 01:49:03.671: D/LOG(573): max week number5
01-22 01:49:03.671: D/LOG(573): max week number6
01-22 01:49:03.681: D/LOG(573): max week number5
01-22 01:49:03.691: D/LOG(573): max week number5
01-22 01:49:03.691: D/LOG(573): max week number5
01-22 01:49:03.711: D/LOG(573): max week number5
01-22 01:49:03.711: D/LOG(573): max week number5
soluzione semplice funziona bene con i casi d'angolo:
Calendar cal = Calendar.getInstance();
for(int i = 0 ; i < 11;i++){
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, i);
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
// Month value starts from 0 to 11 for Jan to Dec
Log.d("LOG","For Month :: "+ i + " Num Week :: " + maxWeeknumber);
}
Log:
01-22 01:59:35.841: D/LOG(629): For Month :: 0 Num Week :: 6
01-22 01:59:35.841: D/LOG(629): For Month :: 1 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 2 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 3 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 4 Num Week :: 6
01-22 01:59:35.852: D/LOG(629): For Month :: 5 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 6 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 7 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 8 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 9 Num Week :: 6
01-22 01:59:35.871: D/LOG(629): For Month :: 10 Num Week :: 5
Vuoi dire per la settimana a partire da Domenica e termina il Sabato specificamente ? – Swapnil
@Swapnil sì hai ragione – Nezam
se martedì è selezionato devi ottenere quanti martedì in un mese giusto? –