Ciao a tutti! Ho un problema con il seguente codice
In pratica dovrei stampare un calendario nel quale evidenziare la settimana corrente, ma in alcuni mesi come settembre, novembre e dicembre del 2011 tutto funziona correttamente, mentre ad esempio con ottobre prossimo la settimana risulta sfalsata di 1.codice:private static String[] nomiMesi = {"Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"}; private static String[] nomiGiorni = {"Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"}; private GregorianCalendar dataAttuale; private int settimana; /**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; settimana = dataAttuale.get(Calendar.WEEK_OF_MONTH); } /**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; settimana = dataCorrente.get(Calendar.WEEK_OF_MONTH); } public String stampaCalendario() { System.out.println(">>> " + dataAttuale.get(Calendar.DATE) + " " + nomiMesi[dataAttuale.get(Calendar.MONTH)] + " " + dataAttuale.get(Calendar.WEEK_OF_MONTH)); String calendario = ""; // stampo il mese e l'anno attuale int mese = dataAttuale.get(Calendar.MONTH); calendario = calendario.concat(nomiMesi[mese % 12] + " " + dataAttuale.get(Calendar.YEAR) + "\n"); // stampo le intestazioni dei giorni del calendario for (int i = 0; i < nomiGiorni.length; i++) { calendario = calendario.concat(nomiGiorni[i] + "\t"); } calendario = calendario.concat("\n"); // mi allineo con il nome del primo giorno del mese Calendar cal = Calendar.getInstance(Locale.ITALIAN); cal.set(dataAttuale.get(Calendar.YEAR), dataAttuale.get(Calendar.MONTH), 0); int primoMese = cal.get(Calendar.DAY_OF_WEEK); for (int i = 0; i < primoMese-1; i++) { calendario = calendario.concat("\t"); } // stampo i giorni fino all'ultimo del mese int ultimoMese = dataAttuale.getMaximum(Calendar.DAY_OF_MONTH); for (int i = 1; i <= ultimoMese; i++) { calendario = calendario.concat(i + (i == dataAttuale.get(Calendar.DATE) ? "*" : "") + "\t"); // se domenica torno al primo giorno della settimana if ((i + primoMese) % 7 == Calendar.SUNDAY) { calendario = calendario.concat("\n"); } } calendario = calendario.concat("\n"); return "";//calendario; }
Sapreste dirmi il motivo dell'anomalia?
Grazie infinite.

Rispondi quotando

