PDA

View Full Version : [Java] Calcolare differenza di giorni


GiulioCesare
25-10-2005, 12:32
Salve ragazzi, sto cercando di fare un metodo che prende come parametro una data e calcola quanti giorni di differenza ci sono tra questa data è quella di oggi, purtroppo il mio metodo da dei problemi quando la data inserita ha un mese diverso da quello di oggi, per esempio calcolando che oggi è il 25 ottobre, se dico che la data a cui fare il calcolo è il primo novembre, il metodo mi dice che ci sono 6 giorni di differenza, invece di 7, ho paura che forse ci siamo problemi con i mesi che sono di 31 giorni, comunque posto il mio metodo con la speranza che qualcuno mi aiuti, se avete altre soluzioni mi fareste un grande favore, grazie :)


public void convert(int annoDataFin, int meseDataFin, int giornoDataFin)
{
Calendar calendario= new GregorianCalendar();
int annodata = calendario.get(Calendar.YEAR);
int mesedata = calendario.get(Calendar.MONTH)+1;
int giornodata = calendario.get(Calendar.DAY_OF_MONTH);

Calendar today = new GregorianCalendar(annodata, mesedata, giornodata);
Calendar dataFin = new GregorianCalendar(annoDataFin, meseDataFin, giornoDataFin);
long difInDays = ((today.getTime().getTime()-dataFin.getTime().getTime())/(1000*60*60*24));
System.out.println("La differenza e' " +difInDays);
}

^TiGeRShArK^
25-10-2005, 20:05
mmmmmmmm...
ho provato in questo momento a scrivere una classettina di utilità (sfruttando il TDD anke x questa cazzatina tanto x imparare qualkosa...:Prrr: ) a me non da problemi.... forse il tuo problema è dato dal fatto ke effettui una divisione intera anzikè in double, perchè se non sbaglio java crea alcuni casini restituendoti il risultato arrotondato.....
cmq dai un okkiatina al mio codice....
così dovrebbe funzionare almeno nei poki casi in cui l'ho provato....

package calendar;

import java.util.Calendar;

public final class CalendarUtility {
private final static double SECONDS = 1000;
private final static double MINUTES = 60;
private final static double HOURS = 60;
private final static double DAYS = 24;


private CalendarUtility() { }


public static long daysBeetween(Calendar startDate, Calendar endDate){
long startTime = startDate.getTimeInMillis();
long endTime = endDate.getTimeInMillis();
double msecDiff = endTime - startTime;
long daysDiff = Math.round(msecDiff / SECONDS / MINUTES / HOURS / DAYS);
daysDiff = Math.abs(daysDiff);
return daysDiff;
}
}

Angus
26-10-2005, 14:23
Innanzitutto:
public GregorianCalendar(int year,
int month,
int dayOfMonth)

Constructs a GregorianCalendar with the given date set in the default time
zone with the default locale.

Parameters:
year - the value used to set the YEAR calendar field in the calendar.
month - the value used to set the MONTH calendar field in the calendar.
Month value is 0-based. e.g., 0 for January.
dayOfMonth - the value used to set the DAY_OF_MONTH calendar field in
the calendar.


Quindi:

import java.util.*;
import static java.util.Calendar.*;


public class CalendarTest {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
Calendar when = new GregorianCalendar(2005, 0, 1); // '01/01/2005'
int days = now.get(DAY_OF_YEAR) - when.get(DAY_OF_YEAR);
System.out.println(days);
}
}

^TiGeRShArK^
26-10-2005, 15:51
ehm...
così ti ritorna il giorno dell'anno...
x anni diversi come fai???
col mio metodo facevo la trasformazione in millisecondi per superare appunto questa limitazione....

Angus
26-10-2005, 16:22
ehm...
così ti ritorna il giorno dell'anno...
x anni diversi come fai???
col mio metodo facevo la trasformazione in millisecondi per superare appunto questa limitazione....

Che fesso che sono: dal testo del post avevo capito che bisognava trovare la differenza di giorni solo a livello di mese+giorno e non fra le date in assoluto. Per fare questo la soluzione dei millisecondi sembra quella ovvia, ma non ne sarei tanto sicuro. Se hai voglia (io non ne ho :Prrr: ) prova a vedere se questo tizio ha ragione: Paul Hill (http://www.xmission.com/~goodhill/dates/deltaDates.html)