martes, 23 de julio de 2013

Como trabajar con fecha, hora y strings en Java?

Hola a todos, este post es simplemente un pequeño trozo de código, más bien una simple función con la que vamos a poder trabajar con fechas, solo pasando como parámetros un par de Strings. Es solo una pequeña ayuda para que vean como lo podemos hacer de forma simple ;)

Simplemente voy a mostrar una función, que se va a explicar casi por completo con sus comentarios:

public String diferenciaFechas(String inicio, String llegada){

       Date fechaInicio = null;
       Date fechaLlegada = null;

       // configuramos el formato en el que esta guardada la fecha en
       //  los strings que nos pasan
       SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

       try {
           // aca realizamos el parse, para obtener objetos de tipo Date de
// las Strings
           fechaInicio = formato.parse(inicio);
           fechaLlegada = formato.parse(llegada);

       } catch (ParseException e) {
          // Log.e(TAG, "Funcion diferenciaFechas: Error Parse " + e);
       } catch (Exception e){
           // Log.e(TAG, "Funcion diferenciaFechas: Error " + e);
       }

       // tomamos la instancia del tipo de calendario
       Calendar calendarInicio = Calendar.getInstance();
       Calendar calendarFinal = Calendar.getInstance();

       // Configramos la fecha del calendatio, tomando los valores del date que
       // generamos en el parse
       calendarInicio.setTime(fechaInicio);
       calendarFinal.setTime(fechaLlegada);

       // obtenemos el valor de las fechas en milisegundos
       long milisegundos1 = calendarInicio.getTimeInMillis();
       long milisegundos2 = calendarFinal.getTimeInMillis();

       // tomamos la diferencia
       long diferenciaMilisegundos = milisegundos2 - milisegundos1;

       // Despues va a depender en que formato queremos  mostrar esa
       // diferencia, minutos, segundo horas, dias, etc, aca van algunos
       // ejemplos de conversion

       // calcular la diferencia en segundos
       long diffSegundos =  Math.abs (diferenciaMilisegundos / 1000);

       // calcular la diferencia en minutos
       long diffMinutos =  Math.abs (diferenciaMilisegundos / (60 * 1000));
       long restominutos = diffMinutos%60;

       // calcular la diferencia en horas
       long diffHoras =   (diferenciaMilisegundos / (60 * 60 * 1000));

       // calcular la diferencia en dias
       long diffdias = Math.abs ( diferenciaMilisegundos / (24 * 60 * 60 * 1000) );

       // devolvemos el resultado en un string
       return String.valueOf(diffHoras + "H " + restominutos + "m ");
   }

Este es un simple ejemplo de código, por supuesto que deben haber maneras mucho mejores, pero como un par me preguntaron como hacerlo, se me ocurrió dejarlo plasmado en el blog :D Espero que le sirva a alguno.

Saludos a todos, Gabriel