Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    Come comporre una classe setGiorno

    Salve.
    Sto costruendo una classe che mi restituisca la data odierna, e fin qui tutto bene.
    Solo che adesso vorrei settare il giorno della data in un determinato numero di giorni più avanti o indietro nel tempo.
    Qua sotto c'è la classe di costruzione con metodi get e set:
    codice:
    public class ValoreDataGregoriano {
    	private int giorno;
    	private int mese;
    	private int anno;
    
    	public ValoreDataGregoriano() {
    		
    	}
    	public ValoreDataGregoriano(int giorno, int mese, int anno) {
    		this.giorno = giorno;
    		this.mese = mese;
    		this.anno = anno;
    	}
    	
    	public int getGiorno(){
    		GregorianCalendar cal = new GregorianCalendar();
    		int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    		return dayOfMonth;
    	}
    	
    	public int getMese(){
    		GregorianCalendar cal = new GregorianCalendar();
    		int month = cal.get(Calendar.MONTH);
    		return month+1;
    	}
    	public int getAnno(){
    		GregorianCalendar cal = new GregorianCalendar();
    		int year = cal.get(Calendar.YEAR);
    		return year;
    	}
    
    	public void setGiorno(int a) {
    		a = giorno;
    		GregorianCalendar cal = new GregorianCalendar();
    		cal.add(Calendar.DAY_OF_MONTH, a);
    	}
    	public int getGiornoDopo() {
    		return giorno;
    	}
    }
    Il problema e che non riesco a sposatare il giorno della data.
    Qui sotto c'è il main:
    codice:
                  ValoreDataGregoriano insCal = new ValoreDataGregoriano();
    		g = insCal.getGiorno();
    		m = insCal.getMese();
    		a = insCal.getAnno();
    
    		System.out.println(g + "/" + m + "/" + a);
    
    		insCal.setGiorno(12);
    		g1 = insCal.getGiornoDopo();
    		m1 = insCal.getMese();
    		a1 = insCal.getAnno();
    		System.out.println(g1 + "/" + m1 + "/" + a1);

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Come comporre una classe setGiorno

    Originariamente inviato da Ironmax
    Sto costruendo una classe che mi restituisca la data odierna, e fin qui tutto bene.
    No. Se vuoi fare una classe che "modella" una data e che sfrutta (in un certo qual modo) anche GregorianCalendar, hai almeno 2 possibilità:
    1) Fare una classe che fa da "wrapper" di GregorianCalendar. Quindi la tua classe avrebbe solo un campo di tipo GregorianCalendar. I tuoi metodi es. getGiorno/setGiorno ecc... andrebbero ad agire sui campi del GregorianCalendar interno. Ma la tua classe offrirebbe una maggior semplicità, è più facile e intuitivo invocare getGiorno() sul tuo oggetto che get(Calendar.DAY_OF_MONTH) su un calendar.
    2) Fare una classe che ha i propri campi per giorno/mese/anno. Quindi i getGiorno/setGiorno, ecc... andrebbero a gestire (quasi) direttamente i campi. Chiaramente potresti gestire anche della validazione dei valori e se vuoi offrire dei metodi es. aggiungiGiorni(int n) puoi farlo, magari sfruttando internamente al metodo proprio un GregorianCalendar.

    Ma come hai fatto finora .... no. Il tuo getGiorno non ha senso. Non stai usando il campo 'giorno', stai restituendo il giorno "corrente" (e allora il campo a che servirebbe?).
    E il setGiorno ha ancora meno senso: al parametro 'a' del metodo ci assegni il campo (?!) e in un nuovo GregorianCalendar (che poi tanto viene "buttato" via perché locale e non più usato finito il metodo) ci assegni il valore di 'a' che è quello del campo 'giorno'.
    Non ha senso ...

    Se ragioni in termini di "programmazione ad oggetti" ... lo fai. Altrimenti .... no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Grazie andbin dei tuoi consigli.

  4. #4
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Ciao andbin.
    Volevo capire una cosa. La classe GregorianCalendar tiene conto degli anni bisestili oppure conta tutti i mesi dell'anno con 31 giorni?
    Grazie.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Ironmax
    Volevo capire una cosa. La classe GregorianCalendar tiene conto degli anni bisestili oppure conta tutti i mesi dell'anno con 31 giorni?
    La gestione degli anni bisestili è corretta in GregorianCalendar così come è corretto il calcolo del numero di giorni nei vari mesi.

    codice:
    GregorianCalendar c = new GregorianCalendar(2012, Calendar.FEBRUARY, 28);    // 28 Febbraio 2012
    System.out.println(c.getTime());
    c.add(Calendar.DAY_OF_MONTH, 1);   // +1 giorno
    System.out.println(c.getTime());
    c.add(Calendar.DAY_OF_MONTH, 1);   // +1 giorno
    System.out.println(c.getTime());
    L'output è:
    codice:
    Tue Feb 28 00:00:00 CET 2012
    Wed Feb 29 00:00:00 CET 2012
    Thu Mar 01 00:00:00 CET 2012
    Oppure ad esempio:
    codice:
    for (int m = Calendar.JANUARY; m <= Calendar.DECEMBER; m++) {
        GregorianCalendar c = new GregorianCalendar(2012, m, 1);
        System.out.println("Mese " + (m+1) + "  n.giorni=" + c.getActualMaximum(Calendar.DAY_OF_MONTH));
    }
    L'output è:
    codice:
    Mese 1  n.giorni=31
    Mese 2  n.giorni=29
    Mese 3  n.giorni=31
    Mese 4  n.giorni=30
    Mese 5  n.giorni=31
    Mese 6  n.giorni=30
    Mese 7  n.giorni=31
    Mese 8  n.giorni=31
    Mese 9  n.giorni=30
    Mese 10  n.giorni=31
    Mese 11  n.giorni=30
    Mese 12  n.giorni=31
    Quindi come si può vedere è tutto assolutamente corretto!


    P.S. Le date sono stampate in formato fisso/inglese ma è per via del toString() di Date.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.