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
- Log4j2 en Android
- ¿Cómo se puede escuchar EditText?
- Ejemplos de FacebookSDK Ejemplo no funciona en el teléfono Android
- Necesito recuperar una instancia de una actividad
- ¿cuál es el significado de "this.this $ 0"?
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 ……….
- Cómo setText de un hilo independiente en Android
- Android Studio: El módulo no aparecerá en "Editar configuración"
- ¿Cómo puedo hacer que mi Android SwipeableCardViews se parezca más a la aplicación de correo de IOS 7 (desliza para mostrar los botones)
- FindViewById (int) devuelve null en un botón específico en Android 3.1 otras versiones su multa
- Android: evitar la recarga de WebView en rotación
- ¿Debería llamarse a findviewbyid en un subproceso de interfaz de usuario?
- Org.apache.http.client.ClientProtocolException
- Inicializar la variable final dentro del constructor en otro método
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
- No se puede resolver el tipo org.apache.http.Header. Se hace referencia indirectamente a los archivos .class necesarios
- Agregar una columna a la tabla de SQLite en Android?