Android Days entre dos fechas
Quiero comparar dos fechas para mi aplicación de Android, pero tengo un problema muy extraño.
Por ejemplo:
- SQLite selecciona todos los registros de hoy y día anterior
- Notificación de Android en una fecha específica
- Edición de calendario en Añadir mes +1 al mes del calendario en Android
- Calcular la dirección de la luz solar de acuerdo con la hora actual y la posición en la tierra
- ¿Qué clase debo usar para Date's en Android?
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
?
- Analizar excepciones en Android
- Android java.lang.NoClassDefFoundError utilizando las bibliotecas JODA
- ¿Los hilos son lo suficientemente fiables para calcular segundos?
- Compare las fechas (almacenadas como cadena) en la base de datos android sqlite?
- La fecha y hora muestran datos erróneos
- Uso del elemento de entrada de fecha HTML5 con android
- Cómo obtener el nombre del mes utilizando la fecha actual como entrada en la función
- Java convertir la marca de tiempo UTC a DateTime local
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.
- Android – tantos problemas con la biblioteca de expansión
- Fragmento anterior visible bajo el nuevo fragmento