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?
- ¿Cuándo es exactamente seguro usar clases anónimas internas?
- Insertar y seleccionar datos en árabe Android SQLite
- JavaPoet + Android Studio "addModifiers (Modifier) no se puede aplicar a Modificador"
- Android Studio TransformException: Error: Error de ejecución para la tarea ': app: transformClassesWithDexForDebug'
- Android: firma digital con Bezier
- Crash en Android 2.3.3 después de actualizar a la biblioteca de soporte 25.0.0 (java.lang.NoSuchMethodError: android.view.View.isAttachedToWindow)
- Reutilizar conexiones TCP con HttpsUrlConnection
- UUID.fromString () devuelve un UUID no válido?
- Cómo jugar video de youtube en ExoPlayer en Android?
- Cómo abrir PDF en android utilizando pdfview
- Emulador de emparejamiento de par con emulador de Android
- Android NullpointerException al intentar recuperar datos de SQLiteOpenHelper
- Gráficos Android gran consumo de memoria montón? - LibGDX
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);
- Desarrollo de aplicaciones Android
- Cómo establecer multiline, firstletter caps y deshabilitar sugerencias en edittext