Android Days entre dos fechas

Quiero comparar dos fechas para mi aplicación de Android, pero tengo un problema muy extraño.

Por ejemplo:

Si establecí la parte back in the past fecha back in the past a 127 días:

 this.dateEvent = System.currentTimeMillis() - (127 * 24 * 3600 * 1000) 

Y luego compararlo con la fecha actual (Días entre)

  Calendar sDate = getDatePart(new Date(this.dateEvent)); Calendar eDate = getDatePart(new Date(System.currentTimeMillis())); int daysBetween = 0; while (sDate.before(eDate)) { sDate.add(Calendar.DAY_OF_MONTH, 1); daysBetween ++; } while (sDate.after(eDate)) { eDate.add(Calendar.DAY_OF_MONTH, 1); daysBetween ++; } return daysBetween; 

Volverá 22 que no es en absoluto lo que se esperaba.

¿He hecho algo malo o es un problema con la clase Calendar ?

Por favor, consulte este código, esto puede ayudarle.

 public String get_count_of_days(String Created_date_String, String Expire_date_String) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()); Date Created_convertedDate = null, Expire_CovertedDate = null, todayWithZeroTime = null; try { Created_convertedDate = dateFormat.parse(Created_date_String); Expire_CovertedDate = dateFormat.parse(Expire_date_String); Date today = new Date(); todayWithZeroTime = dateFormat.parse(dateFormat.format(today)); } catch (ParseException e) { e.printStackTrace(); } int c_year = 0, c_month = 0, c_day = 0; if (Created_convertedDate.after(todayWithZeroTime)) { Calendar c_cal = Calendar.getInstance(); c_cal.setTime(Created_convertedDate); c_year = c_cal.get(Calendar.YEAR); c_month = c_cal.get(Calendar.MONTH); c_day = c_cal.get(Calendar.DAY_OF_MONTH); } else { Calendar c_cal = Calendar.getInstance(); c_cal.setTime(todayWithZeroTime); c_year = c_cal.get(Calendar.YEAR); c_month = c_cal.get(Calendar.MONTH); c_day = c_cal.get(Calendar.DAY_OF_MONTH); } /*Calendar today_cal = Calendar.getInstance(); int today_year = today_cal.get(Calendar.YEAR); int today = today_cal.get(Calendar.MONTH); int today_day = today_cal.get(Calendar.DAY_OF_MONTH); */ Calendar e_cal = Calendar.getInstance(); e_cal.setTime(Expire_CovertedDate); int e_year = e_cal.get(Calendar.YEAR); int e_month = e_cal.get(Calendar.MONTH); int e_day = e_cal.get(Calendar.DAY_OF_MONTH); Calendar date1 = Calendar.getInstance(); Calendar date2 = Calendar.getInstance(); date1.clear(); date1.set(c_year, c_month, c_day); date2.clear(); date2.set(e_year, e_month, e_day); long diff = date2.getTimeInMillis() - date1.getTimeInMillis(); float dayCount = (float) diff / (24 * 60 * 60 * 1000); return ("" + (int) dayCount + " Days"); } 

Aquí hay una solución de dos líneas:

 long msDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis(); long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff); 

En este ejemplo se obtiene el número de días entre la fecha "testCalendar" y la fecha actual.

Finalmente he encontrado la manera más fácil de lidiar con eso. Aquí está mi código:

 public int getTimeRemaining() { Calendar sDate = toCalendar(this.dateEvent); Calendar eDate = toCalendar(System.currentTimeMillis()); // Get the represented date in milliseconds long milis1 = sDate.getTimeInMillis(); long milis2 = eDate.getTimeInMillis(); // Calculate difference in milliseconds long diff = Math.abs(milis2 - milis1); return (int)(diff / (24 * 60 * 60 * 1000)); } private Calendar toCalendar(long timestamp) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timestamp); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar; } 

Espero eso ayude.

  Date userDob = new SimpleDateFormat("yyyy-MM-dd").parse(dob); Date today = new Date(); long diff = today.getTime() - userDob.getTime(); int numOfYear = (int) ((diff / (1000 * 60 * 60 * 24))/365); int numOfDays = (int) (diff / (1000 * 60 * 60 * 24)); int hours = (int) (diff / (1000 * 60 * 60)); int minutes = (int) (diff / (1000 * 60)); int seconds = (int) (diff / (1000)); 

la mejor manera :-

  long fromCalender = Calender.getInstance(); fromCalender.set...// set the from dates long toCalender = Calender.getInstance(); fromCalender.set...// set the to dates long diffmili = fromCalender - toCalender; long hours = TimeUnit.MILLISECONDS.toHours(diffmili); long days = TimeUnit.MILLISECONDS.toDays(diffmili); long min = TimeUnit.MILLISECONDS.toMinutes(diffmili); long sec = TimeUnit.MILLISECONDS.toSeconds(diffmili); 
 public long Daybetween(String date1,String date2,String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern,Locale.ENGLISH); Date Date1 = null,Date2 = null; try{ Date1 = sdf.parse(date1); Date2 = sdf.parse(date2); }catch(Exception e) { e.printStackTrace(); } return (Date2.getTime() - Date1.getTime())/(24*60*60*1000); } 

Tuve la misma necesidad, finalmente terminé usando Joda Time, es muy conveniente y ofrece un montón de funciones adicionales, incluyendo el que está buscando.

Puede descargar los archivos desde aquí .

Una vez que haya incluido el archivo jar en su proyecto, puede hacer fácilmente por ejemplo lo siguiente:

 int daysBetween = Days.daysBetween(new DateTime(sDate), new DateTime(eDate)).getDays(); 

La mejor solución que trabajó para mí es:

 private static int findDaysDiff(long unixStartTime,long unixEndTime) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTimeInMillis(unixStartTime); calendar1.set(Calendar.HOUR_OF_DAY, 0); calendar1.set(Calendar.MINUTE, 0); calendar1.set(Calendar.SECOND, 0); calendar1.set(Calendar.MILLISECOND, 0); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(unixEndTime); calendar2.set(Calendar.HOUR_OF_DAY, 0); calendar2.set(Calendar.MINUTE, 0); calendar2.set(Calendar.SECOND, 0); calendar2.set(Calendar.MILLISECOND, 0); return (int) ((calendar2.getTimeInMillis()-calendar1.getTimeInMillis())/(24 * 60 * 60 * 1000)); } 

Dado que primero convierte Hour , Minute , Second y Millisecond a 0 y ahora la diferencia será sólo en días.

  • Cómo obtener el valor datepicker en formato de fecha?
  • ¿Cómo obtener el día de la semana de una fecha?
  • ¿Hay alguna biblioteca o algoritmo para convertir Shamsi (Jalali) a fecha gregoriana en Java?
  • Cómo dividir cadena en java
  • Formato personalizado para el intervalo de tiempo relativo
  • Cómo construir una fecha de una cadena
  • ActiveAndroid: columnas de fecha no creadas
  • Formato de etiqueta de fecha / hora de eje-x de MPAndroidChart
  • Cómo obtener fechas de la base de datos y comprobar si se solapan?
  • ¿Cómo obtener el número de días entre dos instancia de calendario?
  • ¿Cómo obtendría una cadena de fecha corta basada en la configuración regional para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.