Diferencia, en minutos, entre dos fechas

Necesito obtener el número de minutos entre dos fechas. Sé que Joda es el mejor para usar, pero esto es para un proyecto de Android, así que prefiero usar un poco de bibliotecas externas como sea posible, y la aplicación que estoy construyendo no requiere que el cálculo sea quirúrgicamente preciso.

Sin embargo, el código que estoy usando no parece estar funcionando. Estoy tratando de obtener el número de minutos entre "11/21/2011 7:00:00 AM" y "11/21/2011 1:00:00 PM" (que debe ser de 360 ​​minutos), pero el código I estoy usando devoluciones 0:

int diff = minutesDiff(GetItemDate("11/21/2011 7:00:00 AM"), GetItemDate("11/21/2011 1:00:00 PM")); public static Date GetItemDate(final String date) { final Calendar cal = Calendar.getInstance(TimeZone.getDefault()); final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a"); format.setCalendar(cal); try { return format.parse(date); } catch (ParseException e) { return null; } } public static int minutesDiff(Date earlierDate, Date laterDate) { if( earlierDate == null || laterDate == null ) return 0; return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000)); } 

2 Solutions collect form web for “Diferencia, en minutos, entre dos fechas”

He depurado a través de su código: hay ParseException en GetItemDate() para ambas cadenas de fecha como:

Unparseable date: 11/21/2011 07:00:00 AM

El problema es que el análisis de horas AM / PM sólo funciona con "hh" (small caps!) O "KK". Al menos es el caso en mi teléfono (parece que algunos de nosotros no ver este problema en absoluto). Lo probé también funciona con una sola "h" también.

hh = 1-12
KK = 0-11
HH = 0-23
kk = 1-24

Cambie su línea de SimpleDateFormat a esto:

 final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US); 

Este post explica el "a" y Locale : No se puede analizar DateTime-cadena con marcador AM / PM

PD. Soy de Finlandia, así que debo usar la parte "Locale.US" para que esto funcione. Los residentes estadounidenses pueden probar el código sin él, creo.

Si su GetItemDate está fallando para cualquier fecha, obtendrá cero. En la declaración catch, coloque un println o depuración para generar el problema y ver si eso le dice algo.

Además, como cuestión de práctica, cambiaría:

 return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000)); 

a:

 long result = ((laterDate.getTime()/60000) - (earlierDate.getTime()/60000)); return (int) result; 

Esto le da la oportunidad de ver el resultado de las matemáticas en un IDE.

  • Android Obtener el valor de un arraylist Entero se convierte en un número
  • GCM de Android InstanceId.getToken () -> java.io.IOException: TIMEOUT
  • URL de caracteres ilegales
  • Las pestañas de menú no responden
  • Cómo JUnit prueba IntentService
  • ArrayList Adapter (para ListView) sólo muestra el primer elemento agregado
  • Devolución de llamada desde el adaptador
  • Android: ¿Una forma sencilla de hacer una geofence?
  • AdMob no puede mostrar anuncios debido a configChanges
  • Android ListView: obtenga una distancia de desplazamiento
  • ¿Cómo comparar dos arraylist?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.