Confrontare GregorianCalendar

di il
6 risposte

Confrontare GregorianCalendar

Salve ragazzi volevo sapere se qualcuno sa come confrontare due oggetti di tipo GregorianCalendar. In pratica mi serve sapere la differenza in anni tra due date...
import java.util.GregorianCalendar;


public class test {
	public static void main(String[] args) {
		GregorianCalendar cal = new GregorianCalendar();
		GregorianCalendar cal2 = new GregorianCalendar(2019,2,5);
		
	}
	
}

6 Risposte

  • Re: Confrontare GregorianCalendar

    alex.m92 ha scritto:


    In pratica mi serve sapere la differenza in anni tra due date...
    Se ti basta solo sapere la differenza tra i campi "anno" (Calendar.YEAR) dei due (Gregorian)Calendar ignorando gli altri campi .... beh, prendi i due campi (tramite int get(int field) ) e fai la differenza.
  • Re: Confrontare GregorianCalendar

    Facendo la differenza dei soli compi YEAR ottengo solo gli anni, in realtà mi serve sapere la differenza delle date. Ovvero se la prima data è 2010-2-1 e la seconda è 2015-1-1, non ci sono in realtà 5 anni di differenza ma 4 anni e 11 mesi.
  • Re: Confrontare GregorianCalendar

    alex.m92 ha scritto:


    ma 4 anni e 11 mesi.
    Se ti serve una informazione di questo tipo (x anni, y mesi, z giorni), sappi che a livello di Date/Calendar non esiste nulla nel framework di già "fatto" per queste differenze. Dovresti farlo tu con un po' di logica o con una libreria esterna che la implementa (e magari ben testata).

    Da Java 8 c'è la nuovissima Date-Time API e questo calcolo puoi farlo con LocalDate e Period.
  • Re: Confrontare GregorianCalendar

    Ok vorrà dire che dovrò implementare un metodo che fa questo lavoro... Grazie mille...!
  • Re: Confrontare GregorianCalendar

    Cerca: joda.org

    Comunque, con le date c'e' un problema di fondo: il numero di giorni di un mese e di un anno non sono costanti, ma cambiano secondo le regole che conosci: per i mesi puoi avere 28, 29, 30 o 31 giorni, e per gli anni 365 o 366 giorni.

    In generale conviene ragionare in termini di giorni.

    Inoltre, il calendario gregoriano e' solo uni dei possibili calendari, l'altro importante e' il calendario ISO 8601
  • Re: Confrontare GregorianCalendar

    Se ti serve ancora, questo codice da me realizzato ti potrebbe essere utile.
    E' di un vecchio post
    final int GIORNI_MESE[] = {31,28,31,30,31,30,31,31,30,31,30,31};
            
            //che giorno era il 01 gen 1 d.C. ???
            final int PRIMO_GIORNO = 5;
            
            //oggi ( data che voglio esaminare)
            Data data = new Data(23,6,2014,1);  
            
            //giorni trascorsi dal giorno 0
            long giorniTrascorsi = 0;
            int i;
            
            //aggiungo il giorno del mese corrente
            giorniTrascorsi+=(data.giorno-1);
            
            //aggiungo i giorni dei mesi trascorsi completamente in quest'anno
            for(i = 1; i<data.mese; i++){
                giorniTrascorsi+=GIORNI_MESE[i-1];
            }
            
            //aggiungo 365 giorni per ogni anno completamente trascorso
            giorniTrascorsi+=(365*(data.anno-1));
            
            //aggiungo 1 giorno (del mese bisestile) per ogni anno bisestile trascorso ( non è finita qui... )
            giorniTrascorsi+=(data.anno/4);
            
            //gli anni divisibili per 100 non sono bisestili, a parte quelli divisibili anche per 400 ( da Wiki ihihihihi )
            giorniTrascorsi-=(data.anno/100)+(data.anno/400);
            
            //se quest'anno è bisestile ma non è ancora marzo tolgo un giorno
            if(data.mese<3 && (data.anno % 400 == 0 || (data.anno % 100 != 0 && data.anno % 4 == 0))){
                    giorniTrascorsi--;
            }
            
            //i 12 giori saltati all'introduzione del calendario
            giorniTrascorsi+=12;
            
            //mmmmmmm, non te lo apettavi...
            System.out.println("Giorni trascorsi="+giorniTrascorsi);
            
            //che nome ha oggi (wat?)
            data.giornoSettimana = (int) ((giorniTrascorsi+PRIMO_GIORNO)%7);
            
            //finalmente =)
            System.out.println("Oggi è "+ data.giornoSettimana);
Devi accedere o registrarti per scrivere nel forum
6 risposte