2010-09-26 10 views
26

Duplicar posibles:
how to calculate difference between two dates using javaconseguir la diferencia entre la fecha en día en Java

Estoy intentando algo como esto, donde yo estoy tratando de obtener la fecha de cuadros combinados

Calendar start = Calendar.getInstance(); 
Calendar end = Calendar.getInstance(); 

int Sdate=Integer.parseInt(cmbSdate.getSelectedItem().toString()); 
int Smonth=cmbSmonth.getSelectedIndex(); 
int Syear=Integer.parseInt(cmbSyear.getSelectedItem().toString()); 

int Edate=Integer.parseInt(cmbEdate.getSelectedItem().toString()); 
int Emonth=cmbEmonth.getSelectedIndex(); 
int Eyear=Integer.parseInt(cmbEyear.getSelectedItem().toString()); 

start.set(Syear,Smonth,Sdate); 
end.set(Eyear,Emonth,Edate); 

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String startdate=dateFormat.format(start.getTime()); 
String enddate=dateFormat.format(end.getTime()); 

No puedo restar el final y la fecha de inicio ¿Cómo obtengo la diferencia entre la fecha de inicio y la fecha de finalización?

+0

cómo no son capaces? ¿Excepción? ¿Fecha equivocada? – Bozho

+0

Estoy intentando hacer este programa en netbeans n intenté restar d end.getTime-start.getTime() n Me avisaron que era posible usar - operator entre los dos obj Date. –

+0

¿Por qué no puedo agregar mi respuesta? No tengo una pregunta como esta, tengo otra solución para esta pregunta. – UR6LAD

Respuesta

40
Calendar start = Calendar.getInstance(); 
Calendar end = Calendar.getInstance(); 
start.set(2010, 7, 23); 
end.set(2010, 8, 26); 
Date startDate = start.getTime(); 
Date endDate = end.getTime(); 
long startTime = startDate.getTime(); 
long endTime = endDate.getTime(); 
long diffTime = endTime - startTime; 
long diffDays = diffTime/(1000 * 60 * 60 * 24); 
DateFormat dateFormat = DateFormat.getDateInstance(); 
System.out.println("The difference between "+ 
    dateFormat.format(startDate)+" and "+ 
    dateFormat.format(endDate)+" is "+ 
    diffDays+" days."); 

esto no funcionará al cruzar el horario de verano (o saltar segundos) como orange80 señaló y bien podría no dar los resultados esperados cuando usando diferentes horas del día. Utilizando JodaTime podría ser más fácil para obtener resultados correctos, ya que la única manera correcta con Java llanura que sé es utilizar complemento y de calendario antes/después de métodos para comprobar y ajustar el cálculo:

start.add(Calendar.DAY_OF_MONTH, (int)diffDays); 
while (start.before(end)) { 
    start.add(Calendar.DAY_OF_MONTH, 1); 
    diffDays++; 
} 
while (start.after(end)) { 
    start.add(Calendar.DAY_OF_MONTH, -1); 
    diffDays--; 
} 
+0

¡gracias por ayudarme! –

+1

me puede explicar acerca de esta pieza de código: 1000 * 60 * 60 * 24 –

+1

Date.getTime devuelve el tiempo desde 1970 en milisegundos, por lo que la diferencia también es en milisegundos. 1000 milisegundos hacen 1 segundo, 60 segundos hacen 1 minuto, 60 minutos hacen 1 hora y 24 horas hacen 1 día. Por supuesto, podrías dividir diffTime entre 86400000, pero luego no verías tan claramente (está bien, obviamente aún no lo suficiente); cuál es ese número. – hd42

14

Me gusta this.

import java.util.Date; 
import java.util.GregorianCalendar; 

/** 
* DateDiff -- compute the difference between two dates. 
*/ 
public class DateDiff { 
    public static void main(String[] av) { 
    /** The date at the end of the last century */ 
    Date d1 = new GregorianCalendar(2000, 11, 31, 23, 59).getTime(); 

    /** Today's date */ 
    Date today = new Date(); 

    // Get msec from each, and subtract. 
    long diff = today.getTime() - d1.getTime(); 

    System.out.println("The 21st century (up to " + today + ") is " 
     + (diff/(1000 * 60 * 60 * 24)) + " days old."); 
    } 

}

Here es un artículo sobre Java aritmética de fechas.

23

Use JodaTime para esto. Es mucho mejor que el estándar Java DateTime Apis. Aquí está el código en JodaTime para calcular la diferencia en días:

private static void dateDiff() { 

    System.out.println("Calculate difference between two dates"); 
    System.out.println("================================================================="); 

    DateTime startDate = new DateTime(2000, 1, 19, 0, 0, 0, 0); 
    DateTime endDate = new DateTime(); 

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

    System.out.println(" Difference between " + endDate); 
    System.out.println(" and " + startDate + " is " + days + " days."); 

    } 
+2

Gracias por la respuesta mr. Faisal pero necesito usar solo las funciones integradas y apis –

Cuestiones relacionadas