2012-06-15 22 views
9

Duplicar posibles:
Calculating the Difference Between Two Java Date Instances¿Cómo obtener el número de días entre dos fechas en Java?

¿Cómo consigo el número de días entre dos fechas en Java?

¿Cuál es la mejor manera? Aquí es lo que tengo, pero no es el mejor:

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, 
    int month, int day){ 
     int totalworkingdays=0,noofdays=0; 
     String nameofday = ""; 
     ConcurrentHashMap<String,String> workingDaysMap = 
      new ConcurrentHashMap<String,String>(); 
     Map<String,String> holyDayMap = new LinkedHashMap<String,String>(); 
     noofdays = findNoOfDays(year,month,day); 

     for (int i = 1; i <= noofdays; i++) { 
      Date date = (new GregorianCalendar(year,month - 1, i)).getTime(); 
      // year,month,day 
      SimpleDateFormat f = new SimpleDateFormat("EEEE"); 
      nameofday = f.format(date); 

      String daystr=""; 
      String monthstr=""; 

      if(i<10)daystr="0"; 
      if(month<10)monthstr="0"; 

      String formatedDate = daystr+i+"/"+monthstr+month+"/"+year; 

      if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){ 
       workingDaysMap.put(formatedDate,formatedDate); 
       totalworkingdays++; 
      } 
     } 

     return workingDaysMap; 
    } 

public static int findNoOfDays(int year, int month, int day) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(year, month - 1, day); 
     int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
     return days; 
    } 
+2

En particular, esta respuesta: http://stackoverflow.com/a/4549327/22656 –

Respuesta

22

por lo general hago algo como esto:

final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 

int diffInDays = (int) ((date1.getTime() - date2.getTime())/ DAY_IN_MILLIS); 

No hay necesidad de lib externa, y lo suficientemente fácil


Actualización: Acabo de ver que quiere las "Fechas" también, se aplica un método similar:

//assume date1 < date2 

List<Date> dateList = new LinkedList<Date>(); 
for (long t = date1.getTime(); t < date2.getTime() ; t += DAY_IN_MILLIS) { 
    dateList.add(new Date(t)); 
} 

Por supuesto, usando el tiempo JODA u otro lib puede hacer su vida un poco más fácil, aunque no veo la forma actual difícil de implementar


Actualización: Nota importante! esto solo funciona para la zona horaria que no tiene horario de verano o ajustes similares, o su definición de "diferencia en días" significa "diferencia en la unidad de 24 horas"

+2

Solo un recordatorio para las personas que usan este enfoque, esto solo funciona para la zona horaria que no tiene horario de verano ni ajustes similares. –

+0

He retrocedido las respuestas al original, ya que las ediciones hechas a esta respuesta agregan algo que no es parte de mi respuesta original (mencionando 'TimeUnit.MILLISECONDS.toDays (date1.getTime() - date2.getTime()); ') Creo que este tipo de edición es mejor ponerlo como otra respuesta en lugar de cambiar la respuesta existente de otra persona. –

+0

Su primer comentario aquí es realmente importante. Este enfoque da la respuesta incorrecta si 'date1' ocurre durante el horario de verano y' date2' ocurre durante el horario de verano. Por lo tanto, es un error para cualquier país del mundo que tenga ahorros de luz diurna. –

Cuestiones relacionadas