Confrontare GregorianCalendar

di Anonimizzato15175 il
6 risposte
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

  • 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.
  • 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.
  • 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.
  • Ok vorrà dire che dovrò implementare un metodo che fa questo lavoro... Grazie mille...!
  • 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
  • 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