Domanda Problemi con la classe Calendar

SaraAP

Utente Iron
12 Maggio 2018
6
4
0
19
Buon pomeriggio a tutti,
sto cercando di fare un esercizio dove ho una classe Progetto al cui interno c'è la descrizione del progetto, la data di inizio e fine progetto. Tutti i miei dati sono all'interno di un file. La classe progetto è la seguente:
Java:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Progetto {

    public Progetto(String descrizione, Calendar inizio, Calendar fine) {

        this.descrizione = descrizione;
        this.inizio = inizio;
        this.fine = fine;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public Calendar getInizio() {
        return inizio;
    }

    public void setInizio(Calendar inizio) {
        this.inizio = inizio;
    }

    public Calendar getFine() {
        return fine;
    }

    public void setFine(Calendar fine) {
        this.fine = fine;
    }

    public static Progetto leggi(Scanner s) throws ParseException {

        if (!s.hasNextLine())
            return null;
        String descrizione = s.nextLine();

        if (!s.hasNextLine())
            return null;
        SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
        Date d = formatter.parse(s.nextLine());
        Calendar inizio = Calendar.getInstance();
        inizio.setTime(d);

        if (!s.hasNextLine())
            return null;
        Date d2 = formatter.parse(s.nextLine());
        Calendar fine = Calendar.getInstance();
        fine.setTime(d2);

        return new Progetto(descrizione, inizio, fine);

    }

    public void stampa() {

        System.out.println("PROGETTO:");
        System.out.println(descrizione);
        System.out.println("Data di inizio: " + inizio.get(Calendar.DAY_OF_MONTH) + "-" + inizio.get(Calendar.MONTH)
                + "-" + inizio.get(Calendar.YEAR));
        System.out.println("Data di fine: " + fine.get(Calendar.DAY_OF_MONTH) + "-" + fine.get(Calendar.MONTH) + "-"
                + fine.get(Calendar.YEAR));
        System.out.println();

    }


    private String descrizione;
    private Calendar inizio;
    private Calendar fine;
   
}

Successivamente ho creato una classe Gestore dove al cui interno ho dato vita ad un ArrayList della classe Progetto. La classe Gestore è la seguente:
Java:
public class Gestore {

    public Gestore(String nomeFile) throws FileNotFoundException, ParseException {

       progetti = new ArrayList<>();
        File fileP = new File(nomeFile);
        Scanner sP = new Scanner(fileP);
        Progetto p = Progetto.leggi(sP);

        while (p != null) {

            progetti.add(p);

            p = Progetto.leggi(sP);
        }

    }
   
    private ArrayList<Progetto> progetti;
   
}
Il problema è che l'esercizio mi chiede di implementare un metodo dove stampo tutti i progetti che hanno avuto durata di tot mesi. Qualcuno potrebbe aiutarmi per favore? Grazie mille
 
Ultima modifica:
Ciao, ipotizza che x sia un progetto appartenente al tuo ArrayList<Progetto>(x non nullo) ed y il tuo tot. mesi, allora durata(x) >= y se e solo se:
(x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR)) * 12 + x.getFine.get(Calendar.MONTH) - x.getInizio.get(Calendar.MONTH)) >= y

Dove:
x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR) e' la differenza in anni tra due progetti;
x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR)) * 12 e' la conversione in mesi della differenza in anni tra due progetti;
x.getFine.get(Calendar.MONTH) - x.getInizio.get(Calendar.MONTH) e' la differenza in mesi tra due progetti.

Ti consiglio anche di effettuare i controlli necessari per evitare differenze di mesi o anni negative.
 
  • Mi piace
Reazioni: SaraAP
Ciao, ipotizza che x sia un progetto appartenente al tuo ArrayList<Progetto>(x non nullo) ed y il tuo tot. mesi, allora durata(x) >= y se e solo se:
(x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR)) * 12 + x.getFine.get(Calendar.MONTH) - x.getInizio.get(Calendar.MONTH)) >= y

Dove:
x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR) e' la differenza in anni tra due progetti;
x.getFine.get(Calendar.YEAR) - x.getInizio.get(Calendar.YEAR)) * 12 e' la conversione in mesi della differenza in anni tra due progetti;
x.getFine.get(Calendar.MONTH) - x.getInizio.get(Calendar.MONTH) e' la differenza in mesi tra due progetti.

Ti consiglio anche di effettuare i controlli necessari per evitare differenze di mesi o anni negative.


Grazie mille davvero, è tutto chiaro :)
Messaggio unito automaticamente:

E quindi vuoi sapere come calcolare la differenza (in mesi) tra due Calendar?
Scusa la domanda: l'uso di Calendar è un requisito obbligatorio? O puoi usare altro?

Si voglio sapere come calcolare la differenza in mesi tra due Calendar. Non è obbligatorio utilizzare questa classe ma è l'unica che conosco per gestire le date.