Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137

    Differenza fra due date in mesi

    Ciao,
    come faccio a calcolare la differenza fra due date espressa in mesi?
    Praticamente date due date mi serve sapere il numero di mesi che le separa.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ciao ho qui una funzione che fa al caso tuo..
    in questo caso calcolo la differenza in giorni, nn dovresti aver problemi a metterla in mesi

    codice:
    	/**
    	 * METODO PER CALCOLO GIORNI DI DIFFERENZA TRA 2 DATE CON FORMATO SPECIFICO
    	 * 
    
    	 * Il metodo calcola e restituisce il numero di giorni di differenza tra 2 date
    	 * 
    	 * @param sdate1
    	 * data(ora) da cui sottrarre
    	 * @param sdate2
    	 * data(ora) da sottrarre
    	 * @param format
    	 * formato delle date per controllo
    	 * @param tz
    	 * timezone
    	 * @return
    	 * giorni di differenza
    	 * @throws ParseException
    	 */
    	public static int diffDayFrom2Date(String sdate1, String sdate2, String format, TimeZone tz) throws ParseException{
    		SimpleDateFormat df = new SimpleDateFormat(format);
    		Date date1  = null;
    		Date date2  = null;
    		date1 = df.parse(sdate1); 
    		date2 = df.parse(sdate2); 
    		Calendar cal1 = null; 
    		Calendar cal2 = null;
    		if (tz == null){
    			cal1=Calendar.getInstance(); 
    			cal2=Calendar.getInstance(); 
    		}else{
    			cal1=Calendar.getInstance(tz); 
    			cal2=Calendar.getInstance(tz); 
    		}
    		// different date might have different offset
    		cal1.setTime(date1);          
    		long ldate1 = date1.getTime() + cal1.get(Calendar.ZONE_OFFSET) + cal1.get(Calendar.DST_OFFSET);
    		cal2.setTime(date2);
    		long ldate2 = date2.getTime() + cal2.get(Calendar.ZONE_OFFSET) + cal2.get(Calendar.DST_OFFSET);
    		// Use integer calculation, truncate the decimals
    		int hr1   = (int)(ldate1/3600000); //60*60*1000
    		int hr2   = (int)(ldate2/3600000);
    		int days1 = (int)hr1/24;
    		int days2 = (int)hr2/24;
    		int dateDiff  = days2 - days1;
    		int weekOffset = (cal2.get(Calendar.DAY_OF_WEEK) - cal1.get(Calendar.DAY_OF_WEEK))<0 ? 1 : 0;
    		int weekDiff  = dateDiff/7 + weekOffset; 
    		int yearDiff  = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR); 
    		int monthDiff = yearDiff * 12 + cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);
    		// RITORNA DIFFERENZA DATE
    		return dateDiff;
    	}
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    Ciao,
    avevo già trovato tutte le tue funzioni con una ricerca via google.
    Nell'attesa ho approntato una soluzione mia che ti posto perchè non mi dispiacerebbe avere il tuo parere:

    codice:
    int rangeDate = tipoDocumentoElement.getRangeDataDocumento();
    Calendar calendarDa = Calendar.getInstance();
    Calendar calendarA = Calendar.getInstance();
    calendarDa.setTime(datada);
    calendarA.setTime(dataa);
    						
    int annoDa = calendarDa.get(Calendar.YEAR);
    int meseDa = calendarDa.get(Calendar.MONTH);
    int annoA = calendarA.get(Calendar.YEAR);
    int meseA = calendarA.get(Calendar.MONTH);
    						
    int diffAnni = annoA - annoDa;
    int diffMesi = 0;
    if (meseDa <= meseA) {
    	diffMesi = meseA - meseDa;
    } 
    else{
    	int tempDiff = 12 - meseDa;
    	diffMesi = tempDiff + meseA;
    }
    			
    int numeroMesiInserito = 0;
    if (diffMesi != 0) {
    	numeroMesiInserito = diffAnni * diffMesi;
    }
    else{
    	if (diffAnni != 0) {
    		numeroMesiInserito = diffAnni * 12;
    	}
    }
    if (numeroMesiInserito > rangeDate) {
            System.out.println("ERRORE!!!");
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    errata corridge:

    codice:
    numeroMesiInserito = diffAnni * 12 * diffMesi;
    scusa ma sono in debug su questa soluzione.



  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    Ok, fatto di seguito la versione definitiva del mio problema.

    codice:
    /**
    	 * Calcola la differenza in mesi fra due date passate
    	 * @param dataDa
    	 * @param dataA
    	 * @return
    	 */
    	public static int getNumeroMesiDifferenzaDate(Date dataDa, Date dataA){
    		Calendar calendarDa = Calendar.getInstance();
    		Calendar calendarA = Calendar.getInstance();
    		calendarDa.setTime(dataDa);
    		calendarA.setTime(dataA);
    		
    		int annoDa = calendarDa.get(Calendar.YEAR);
    		int meseDa = calendarDa.get(Calendar.MONTH);
    		int annoA = calendarA.get(Calendar.YEAR);
    		int meseA = calendarA.get(Calendar.MONTH);
    		
    		int diffAnni = annoA - annoDa;
    		int diffMesi = 0;
    		if (meseDa <= meseA) {
    			diffMesi = meseA - meseDa;
    		} 
    		else{
    			// se il mese di arrivo è precedente a quello di inizio allora calcolo la differenza in mesi come il mese di arrivo + 12 (mesi in un'anno) - mese di inizio
    			int tempDiff = 12 - meseDa;
    			diffMesi = tempDiff + meseA;
    			if (diffAnni != 0) {
    				// se gli anni sono diversi devo sottrarre 1 alla loro differenza perchè un anno lo uso per il calcolo dei mesi di differenza
    				diffAnni -= 1;
    			}
    		}
    		
    		int numeroMesiFinale = 0;
    		if (diffMesi != 0) {
    			numeroMesiFinale = diffAnni * 12 + diffMesi;
    		}
    		else{
    			if (diffAnni != 0) {
    				numeroMesiFinale = diffAnni * 12;
    			}
    		}
    		return numeroMesiFinale;
    	}

  6. #6
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ti consiglio però di impostare il timezone.. potrebbe darti problemi in alcuni rari (e quindi terribili !!) casi !! bye
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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.