2010-10-25 20 views
8

Voglio solo chiedere qual è il modo efficace per ottenere i numeri della settimana di un determinato mese. Ho una funzione con il numero di mese & anno come argomenti, il valore di ritorno della funzione dovrebbe essere un array int che contengono i numeri delle settimane del mese specifico. (Come segue ...)Come ottenere i numeri settimanali di un determinato mese?

public int[] getWeeksOfMonth(int month, int year){ 
      //what's the efficient way to implement this?? 
} 
+0

La questione non è chiara e accetta le risposte alle domande precedenti. – Emil

+0

duplicato di una delle altre domande che non hai accettato! http://stackoverflow.com/questions/3941700/how-to-get-dates-of-a-week-i-know-week-number –

risposta

9

L'attributo WEEK_OF_YEAR della classe Calendar può essere utile per te.

Creare una nuova data che sarà il primo giorno del mese specificato. Ottieni la settimana dell'anno per questo giorno, diciamo che hai il valore start.

Creare una nuova data che sarà l'ultimo giorno del mese specificato. Ottieni la settimana dell'anno per questo giorno, quindi ora hai il valore end.

Infine, creare un semplice int[] che conterrà valori da start a end.

+2

Non devi ripetere l'intero mese. Dai un'occhiata alla settimana del primo giorno, dì "s", e alla settimana dell'ultimo giorno, dì "e", e costruisci la matrice tenendo i valori di "e-s + 1' da' s' a 'e'. – Flinsch

+0

@Flinsch Sì, hai ragione. Ho aggiornato la mia risposta. – romaintaz

+2

Flinsch: questo non funzionerà in tutti i casi. Vedi ad esempio gennaio 2010. I tre primi giorni dell'anno appartengono alla settimana 53. Il quarto giorno appartiene alla settimana 1. – Grodriguez

0
  1. Creare istanze di Calendario per primo e ultimo giorno del mese.
  2. poi su ogni istanza invocare il Passo get(Calendar.WEEK_OF_YEAR)
  3. [2] tornerà di inizio e fine indice per le settimane
+0

Si noti che può succedere (indice finale Grodriguez

+0

hmm - come? finché è lo stesso mese con cui ci stiamo occupando, come può essere che endIndex anirvan

3

Non sono sicuro se si vuole restituire un array di lunghezza pari al numero di giorni del mese, con ciascun valore come numero della settimana per il giorno corrispondente o un array di tutti i numeri di settimana distinti di per i giorni del mese specificato. Supponendo che è l'ex, questo dovrebbe funzionare:

public static int[] getWeeksOfMonth(int month, int year) 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, year); 
    cal.set(Calendar.MONTH, month); 
    cal.set(Calendar.DAY_OF_MONTH, 1); 

    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
    int weeks[] = new int[ndays]; 
    for (int i = 0; i < ndays; i++) 
    { 
     weeks[i] = cal.get(Calendar.WEEK_OF_YEAR); 
     cal.add(Calendar.DATE, 1); 
    } 
    return weeks; 
} 

Se si desidera una serie di distinti numeri di settimana per i giorni nel mese specificato:

public static Integer[] getWeeksOfMonth(int month, int year) 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, year); 
    cal.set(Calendar.MONTH, month); 
    cal.set(Calendar.DAY_OF_MONTH, 1); 

    Set<Integer> weeks = new HashSet<Integer>(); 
    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
    for (int i = 0; i < ndays; i++) 
    { 
     weeks.add(cal.get(Calendar.WEEK_OF_YEAR)); 
     cal.add(Calendar.DATE, 1); 
    } 

    return weeks.toArray(new Integer[0]); 
} 

(notare che questo ultimo esempio restituisce un array di Integer oggetti, ma è banale modificarlo per restituire un array di int invece)

5

Calendar cal = Calendar.getInstance();

int maxWeeknumber = cal.getActualMaximum (Calendar.WEEK_OF_MONTH);

+0

Questo ti dà quante settimane ci sono in un certo mese, che di solito varia da 5 a 6 (ad eccezione di febbraio, che può essere solo 4 settimane) – Maragues

3

credo, che questo è il modo più semplice:

Calendar now = Calendar.getInstance(); 

System.out.println("Current week of month is : " + 
      now.get(Calendar.WEEK_OF_MONTH)); 
Problemi correlati