Cómo comparar el tiempo en java / android (dado entrada en cadenas)?

Tengo dos cadenas que se utilizan para almacenar el tiempo en el formato hh: mm . Quiero comparar estos dos para saber qué tiempo es mayor. ¿Cuál es la manera más fácil de hacer esto?

Bueno, si en realidad son hh: mm (incluidos los ceros a la izquierda y en el formato de 24 horas), entonces puede compararlos lexicográficamente (es decir, utilizando String.compareTo(String) ). Ese es el beneficio de un formato clasificable 🙂

Por supuesto, eso no comprobará que ambos valores son tiempos válidos. Si usted necesita hacer eso, probablemente debería analizar las dos veces: compruebe la longitud, compruebe el colon, analice dos subcadenas y probablemente multiplique el número de horas por 60 y agréguelo al número de minutos para obtener un número total de minutos . Entonces puedes comparar esos dos totales.

EDIT: Como se mencionó en los comentarios, si usted necesita analizar los valores por cualquier razón, personalmente recomendaría usar Joda Time (posiblemente una versión reducida, dada la naturaleza móvil) en lugar de SimpleDateTimeFormat y Date . Joda Time es una API de fecha y hora mucho más agradable que la incorporada.

Utilice las clases SimpleDateFormat y Date. Este último implementa Comparable, por lo que debería ser capaz de utilizar el método .compareTo () para realizar la comparación real. Ejemplo:

  String pattern = "HH:mm"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { Date date1 = sdf.parse("19:28"); Date date2 = sdf.parse("21:13"); // Outputs -1 as date1 is before date2 System.out.println(date1.compareTo(date2)); // Outputs 1 as date1 is after date1 System.out.println(date2.compareTo(date1)); date2 = sdf.parse("19:28"); // Outputs 0 as the dates are now equal System.out.println(date1.compareTo(date2)); } catch (ParseException e){ // Exception handling goes here } 

Consulte la documentación de SimpleDateFormat para los patrones.

He escrito funciones para esto antes en mi programa de Android y con mucho gusto compartiré la fuente de abajo.

Funciones (se explicará más adelante con "cómo usar" el código):

 public static void String setFormattedTimeString(final String formatExpr, final long timeStampInSeconds) { final Date dateFromTimeStamp = new Date(timeStampInSeconds); final SimpleDateFormat simpleformat = new SimpleDateFormat(formatExpr); final String formattedDateInString = simpleformat.format(dateFromTimeStamp); return formattedDateInString; } public static void Calendar setCalendar(final int year, final int month, final int day) { final Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, day); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.YEAR, year); return calendar; } public static void double timeDifferenceInDays(final Calendar firstDate, final Calendar secondDate) { final long firstDateMilli = firstDate.getTimeInMillis(); final long secondDateMilli = secondDate.getTimeInMillis(); final long diff = firstDateMilli - secondDateMilli; // 24 * 60 * 60 * 1000 because I want the difference in days. Change // as your wish. final double diffDays = (double) diff / (double) (24 * 60 * 60 * 1000); return diffDays; } 

Y esto es cómo los uso para calcular la diferencia (días en este ejemplo). En este ejemplo estoy asumiendo que usted tiene una marca de tiempo para usar, de lo contrario puede cambiar fácilmente:

 // Here you maybe have a timestamp in seconds or something.. // This is ONE Calendar. final String yearString = MyToolClass.setFormattedTimeString("y", timestamp); final int year = Integer.parseInt(yearString); final String monthString = MyToolClass.setFormattedTimeString("M", timestamp); final int month = Integer.parseInt(monthString); final String day_in_monthString = MyToolClass.setFormattedTimeString("d", timestamp); final int day_of_month = Integer.parseInt(day_in_monthString); final Calendar calendarOne = MyToolClass.setCalendar(year, month, day_of_month); // Same stuff for Calendar two. // Calculate difference in days. final double differenceInDays = MyToolClass.timeDifferenceInDays(calendarOne, calendarTwo); 
  • ¿Cómo puedo establecer alarmas exactas y repetitivas en Android 4.4?
  • Ejecución de múltiples servicios
  • ¿Cómo puedo configurar el color estrella de la barra de calificación?
  • Mover la mano Minuto en el reloj de Android
  • Eliminar todas las clases no utilizadas, métodos del proyecto de Android Studio
  • Google Analytics para Android: establece información sobre dispositivo móvil
  • Valor de preferencia personalizada de Android no guardado
  • Android: implementación de ViewHolder
  • Conexión Bluetooth; No puede enviar correctamente las cadenas
  • Android - Sólo lectura del sistema de archivos IOException
  • Cómo deshabilitar la corrección de hechizos mediante programación en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.