2013-05-15 23 views
27

Ho bisogno di ottenere la differenza tra due date utilizzando Java. Ho bisogno che il mio risultato sia in mesi.Ottenere la differenza tra due date in mesi utilizzando Java

Esempio:

Data di inizio = 2013/04/03 enddate = 2013/05/03 risultato dovrebbe essere 1

se l'intervallo è

Data di inizio = 2013-04-03 enddate = 2014-04-03 Il risultato dovrebbe essere 12

Utilizzo del codice seguente È possibile ottenere i risultati in giorni. Come posso ottenere in mesi?

Date startDate = new Date(2013,2,2); 
Date endDate = new Date(2013,3,2); 
int difInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000*60*60*24)); 
+0

È possibile utilizzare librerie esterne, come JodaTime? – Keppil

+3

Se usi JodaTime, c'è una domanda simile con una risposta semplice qui: http://stackoverflow.com/questions/6844061/calculate-month-difference-in-joda-time – maba

+1

Cosa vuoi tra 2013-01- 31 e 2013-02-01? 0 mesi o 1 mese? –

risposta

88

Se non è possibile utilizzare JodaTime, è possibile effettuare le seguenti operazioni:

Calendar startCalendar = new GregorianCalendar(); 
startCalendar.setTime(startDate); 
Calendar endCalendar = new GregorianCalendar(); 
endCalendar.setTime(endDate); 

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); 
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); 

Nota che se sono le date 2013/01/31 e 2013/02/01, si ottiene una distanza di 1 mese in questo modo, che può o non può essere quello che vuoi.

+0

+1 Funzionerà per ogni anno di differenza. (es.) Startdate = 2014-04-03 enddate = 2013-04-03 Il risultato dovrebbe essere 12' come detto OP. ** AGGIORNAMENTO ** Sì, otterrà una differenza di 1 mese anche se è solo una differenza di 1 giorno, ma OP ha specificato che lo desidera in mesi. 1 mese non è una vera differenza tra queste date, ma 0 non è ancora più la differenza reale. Per questo, se vuoi 0 mesi puoi fare qualcosa come 'Math.floor', o qualcosa del genere. – DaGLiMiOuX

+0

@Etienne Miret: sto ottenendo l'errore seguente. Il metodo startCalendar (int) non è definito per il tipo – ashu

+1

@ashu 'startCalendar (int)' non è un metodo. Hai un errore nella sintassi, forse. Devi fare 'startCalendar.setTime (int)'. In questo caso, 'int' è' startDate.getTime() '. Quindi avrai bisogno di avere nel tuo codice questo 'startCalendar.setTime (startDate.getTime()) ' – DaGLiMiOuX

4

È possibile utilizzare la libreria di tempo Joda per Java. Sarebbe molto più facile calcolare il tempo-diff tra le date con esso.

frammento di esempio per il tempo-diff:

Days d = Days.daysBetween(startDate, endDate); 
int days = d.getDays(); 
+0

FYI, il progetto Joda-Time è ora in modalità di manutenzione, con il suo team che consiglia la migrazione alle classi java.time. –

-4

si può provare questo:

Calendar sDate = Calendar.getInstance(); 
Calendar eDate = Calendar.getInstance(); 
sDate.setTime(startDate.getTime()); 
eDate.setTime(endDate.getTime()); 
int difInMonths = sDate.get(Calendar.MONTH) - eDate.get(Calendar.MONTH); 

Penso che questo dovrebbe funzionare. Ho usato qualcosa di simile per il mio progetto e ha funzionato per quello che mi serviva (anno diff). Si ottiene un Calendar da un Date e si ottiene il diff del mese.

+10

Non funziona se le due date appartengono a diversi anni. –

+0

@EtienneMiret È vero. Questo funzionerà solo per le date dello stesso anno. – DaGLiMiOuX

Problemi correlati