Anomalia calendario

lostedsheep

Nuovo Utente
30 Nov 2010
18
0
0
Slave a tutti.
Sto implementando una classe che mi stampi un calendario ma riscontro un'anomalia quando devo recuperare la settimana ad esempio quella corrente.
Posto il codice che mi da il problema
Codice:
package calendario;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Calendario {

  private static String[] nomiMesi = {"Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"};
  private GregorianCalendar dataAttuale;

  /**Questo costruttore crea un'istanza della classe impostando la data del 
   * calendario a quella corrente
   * 
   */
  public Calendario() {
      GregorianCalendar dataCorrente = new GregorianCalendar(Locale.ITALIAN);
      this.dataAttuale = dataCorrente;
  }
  
  /**Questo costruttore crea un'istanza della classe impostando la data del 
   * calendario a quella passata come parametro
   * 
   * @param dataAttuale 
   */
  public Calendario(GregorianCalendar dataAttuale) {
      this.dataAttuale = dataAttuale;
  }
  
  /**Questo metodo ritorna un intero corrispondente alla settimana alla quale
   * appartiene la data attuale
   *
   */
  public int getSettimanaAttuale() {
    return dataAttuale.get(Calendar.WEEK_OF_MONTH);
  }
  
  /**Questo metodo fa avanzare la data attuale al mese successivo
   *
   */
  public void aggiungiMese() {
    dataAttuale.add(Calendar.MONTH, 1);
  }
  
  /**Questo metodo restituisce la data attuale
   *
   */
  public Calendar getDataAttuale() {
    return dataAttuale;
  }
  
  /**Questo metodo restituisce una stringa con le informazioni sulla settimana
   * 
   * @return 
   */
  public String stampaInfoSettimana() {
      return dataAttuale.get(Calendar.DATE) + " " + nomiMesi[dataAttuale.get(Calendar.MONTH)] + " --> " + dataAttuale.get(Calendar.WEEK_OF_MONTH);
  }
}
ed un main
Codice:
package calendario;

public class Main {

    public static void main(String[] args) {

        Calendario c = new Calendario();

        for (int i = 0; i < 12; i++) {
            System.out.println(c.stampaInfoSettimana());
            c.aggiungiMese();
        }
    }
}
in pratica se il giorno cade di venerdì, sabato o domenica la settimana che mi viene restituita è quella precendente a quella che dovrebbe essere.
Magari dalla spiegazione non si capisce ma mandandolo in esecuzione sarà tutto più chiaro.
Grazie infinite a chi mi darà una mano.
 

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
Ciao la risposta è nella documentazione della classe Calendar, in particolare:

"The first week of a month or year is defined as the earliest seven day period beginning on getFirstDayOfWeek() and containing at least getMinimalDaysInFirstWeek() days of that month or year."

In parole povere dato che firstDayOfWeek per il locale Italian è Lunedì, la prima settimana del mese inizia con il primo lunedì del mese, Per esempio il 10 giugno 2012 appartiene alla prima settimana perchè è il settimo giorno a partire dal primo lunedì del mese, quindi è l'ultimo giorno della prima settimana.

Ciao