Comparar si dos fechas están dentro de la misma semana en android

Tengo dos fechas.

Calendar c=Calendar.getInstance(); year=c.get(c.YEAR); month=c.get(c.MONTH); month++; date=c.get(c.DATE); 

y otra fecha se divide en fecha2, mes2

Ahora quiero ver si ambos están en la misma semana.

Es posible a través de un montón de cálculo y logic.Problem ocurre cuando la primera fecha es supongo 03 de marzo y la 2da fecha es 28Feb. Ambos son en la misma semana pero difícil de comparar / comprobar que. Así que quiero saber si hay algún construido en la función o cualquier forma de compararlos fácilmente.Por favor, ayude ……….

Utilice algo como esto:

 Calendar c=Calendar.getInstance(); year1=c.get(c.YEAR); week1=c.get(c.WEEK_OF_YEAR); Calendar c=Calendar.getInstance(); c.setTimeInMillis(/*Second date in millis here*/) year2=c.get(c.YEAR); week2=c.get(c.WEEK_OF_YEAR); if(year1 == year2){ if(week1 == week2}{ //Do what you want here } } } 

Esto debería hacerlo: D

Puede obtener el número de la semana de su fecha usando c.get(Calendar.WEEK_OF_YEAR) y comparar los resultados de sus dos fechas.

Tampoco se recomienda el acceso a constantes a través de variables de instancia ( c.YEAR ) – acceda a ellas mediante clases ( Calendar.YEAR ).

Simplemente publicar una solución ligeramente modificada basada en @FabianCook y como señaló por @harshal su solución no se ocupa de dos fechas en diferentes años, pero en la misma semana.

La modificación es establecer realmente el DAY_OF_WEEK en ambas fechas de calendario para apuntar a lunes ….. en este caso ambas fechas serán fijadas al mismo día incluso si están en años diferentes y entonces podemos compararlas.

 Calendar cal1 = Calendar.getInstance(); cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); int year1 = cal1.get(Calendar.YEAR); int week1 = cal1.get(Calendar.WEEK_OF_YEAR); Calendar cal2 = Calendar.getInstance(); cal2.setTimeInMillis(/*Second date in millis here*/); cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); int year2 = cal2.get(Calendar.YEAR); int week2 = cal2.get(Calendar.WEEK_OF_YEAR); if(year1 == year2 && week1 == week2){ //Do what you want here } 

Es una solución java. El siguiente segmento de código comprueba si dos fechas están dentro de la misma semana. También cubre casos de borde, donde la semana comienza en un año calendario (diciembre) y termina en el próximo año (enero).

Nota: El código tiene una dependencia de joda-time:

 compile 'joda-time:joda-time:2.3' public static boolean isSameWeek(final Date d1, final Date d2) { if ((d1 == null) || (d2 == null)) throw new IllegalArgumentException("The date must not be null"); return isSameWeek(new DateTime(d1), new DateTime(d2)); } public static boolean isSameWeek(final DateTime d1, final DateTime d2) { if ((d1 == null) || (d2 == null)) throw new IllegalArgumentException("The date must not be null"); // It is important to use week of week year & week year final int week1 = d1.getWeekOfWeekyear(); final int week2 = d2.getWeekOfWeekyear(); final int year1 = d1.getWeekyear(); final int year2 = d2.getWeekyear(); final int era1 = d1.getEra(); final int era2 = d2.getEra(); // Return true if week, year and era matches if ((week1 == week2) && (year1 == year2) && (era1 == era2)) return true; // Return false if none of the conditions are satisfied return false; } 

Caso de prueba:

 public class TestDateUtil { @Test public void testIsSameWeek() { final DateTime d1 = new DateTime(2014, 12, 31, 0, 0); final DateTime d2 = new DateTime(2015, 1, 1, 0, 0); final DateTime d3 = new DateTime(2015, 1, 2, 0, 0); final DateTime d4 = new DateTime(2015, 1, 8, 0, 0); assertTrue(isSameWeek(d1, d2)); assertTrue(isSameWeek(d2, d1)); assertTrue(isSameWeek(d2, d3)); assertTrue(isSameWeek(d3, d2)); assertFalse(isSameWeek(d2, d4)); assertFalse(isSameWeek(d4, d2)); assertFalse(isSameWeek(d1, d4)); assertFalse(isSameWeek(d4, d1)); } } 
 private int weeksBetween(Calendar startDate, Calendar endDate) { startDate.set(Calendar.HOUR_OF_DAY, 0); startDate.set(Calendar.MINUTE, 0); startDate.set(Calendar.SECOND, 0); int start = (int)TimeUnit.MILLISECONDS.toDays( startDate.getTimeInMillis()) - startDate.get(Calendar.DAY_OF_WEEK); int end = (int)TimeUnit.MILLISECONDS.toDays( endDate.getTimeInMillis()); return (end - start) / 7; } 

si este método devuelve 0 están en la misma semana

si este método devuelve 1 endDate es la semana después de startDate

si este método devuelve -1 endDate es la semana anterior a startDate

tu tienes la idea

  • Java.lang.RuntimeException: Realizar detener la actividad que no se reanuda en android
  • Excepción generada durante la representación: Línea de archivo XML binario # -1 error inflar clase
  • Android get Tiempo UTC actual
  • Comunicando de hilo a hilo usando GreenBob EventBus
  • No se han podido leer los descriptores de los archivos de entrada desde el paquete
  • Extraer datos de múltiples fragmentos desde un solo botón
  • Android en el Listener de cambio de texto
  • Buscar enum etiqueta por valor
  • Android - cómo reemplazar parte de una cadena por otra cadena?
  • ¿Cómo uso el ActionBar en las versiones anteriores de Android?
  • HtmlUnit en Android: Dependencias
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.