Este es el comienzo para mi blog

Mi día a día en el desarrolo de Software (JEE, Glassfish, JBoss EAP, Primefaces, Ajax, Android)

martes, 26 de abril de 2016

¿Cómo calcular el tiempo transcurrido entre dos horas en Java con JSF?

  Antecedente

 Este artículo lo escribo por petición de un lector (laura montoya) de mí post ¿Cómo calcular los meses entre dos fechas en Java? a la cual le agradezco por sugerir el tema.

Problema

En nuestro trabajo del día a día seguramente alguna vez nos hemos encontrado con el problema de calcular el tiempo transcurrido entre dos horas (horainicial:Date y horafinal:Date) y cuyo resultado lo debemos presentar en un tercer campo (tiempotranscurrido:Double) utilizando el Framework JSF.

Como hable en mi anterior post (¿Cómo sumar/restar días, meses o años a una fecha en Java?) es conocido para muchos desarrolladores Java que el trabajar con fechas (Date) es algo complicado.

Solución

Para calcular el tiempo transcurrido entre dos horas en Java debemos comprender como trabaja la clase Date de Java; es así que el manejo de horas en Java se lo hace a través de esta misma Clase, ya que esta almacena un instante específico en el tiempo, que incluye fecha y hora; así pues, un instante de tiempo puede ser el 10 de Agosto de 1810 a las 13:10:25.

Otro aspecto muy importante a considerar es la forma de cómo podemos realizar la resta de estos dos instantes de tiempo y almacenarlos en otra variable; para esto la clase Date de Java nos permite extraer el instante de tiempo almacenado en la variable mediante el método getTime(), este método devuelve una resultado de tipo long, y da el tiempo transcurrido, en milisegundos,  desde la fecha Enero 1 de 1970 a las 00:00:00 hasta la fecha con la que estamos trabajando; así pues obteniendo el valor de nuestros dos instantes de tiempo, horainicial y horafinal, podemos hacer la resta de estos dos con lo que obtendríamos el tiempo transcurrido entre estas dos variables, y lo podríamos guardar en una tercera variable.

Hasta el momento hemos conseguido restar los dos instantes de tiempo y almacenarlos en una tercera variable, lo que nos queda por hacer es interactuar con estas variables en el Front End y que el usuario final interactúe con el formulario. Esto lo hacemos con la ayuda del Framework JSF bajo la implementación PrimeFaces 5.0, el cual dicho sea de paso es parte del estándar de JEE. Como hable en mí post Ocultar/mostrar un componente JSF 2.0 en Primefaces 5.0 usando Ajax usaremos los conceptos del ciclo de vida de un componente JSF y adicionalmente los conceptos de eventos sobre los componentes JSF.

Implementación

Luego de haber analizado los problemas para calcular el tiempo transcurrido entre dos horas en Java, dejo el código de la implementación del algoritmo en lenguaje Java.

//3600000  es el valor en milisegundos de una hora.             
int tempresta = (int) (horafinal.getTime() - horainicial.getTime());
double tiempotranscurrido = Math.rint(((double) tempresta / 3600000) * 100) / 100;

Ahora bien, luego de tener ya el resultado del tiempo transcurrido entre las dos horas, trabajaremos en la capa de presentación utilizando la ayuda de un Backing Beean, el cual tiene las variables horainicial y horafinal, de tipo Date, y tiempotranscurrido, de tipo Double, estas variables interactuan mediate el método "seleccionHoras", el cual se ejecuta al momento de invocar al evento de cambio de valor de una variable, -campo en el formulario-, ya sea horainicial u horafinal, y lo almacena en la variable tiempotranscurrido para que finalmente, mediante ajax, este valor pueda ser mostrado en la página. Dejo el código fuente de la implementación.



Finalmente aquí está el componente xhtml.




Comparto unas imágenes de como se ve el resultado final.





Espero sea de utilidad. No olviden dejar sus comentarios.

2 comentarios:

  1. Daniel, excelente tu explicación, muy completa y fácil de entender. Muuuuuchas gracias por dar de tu tiempo para realizar tan excelentes tutoriales.
    Chau!
    Laura

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario estimada Laura, que reconfortante es saber que a través de esto puedo ayudar a más desarrolladores que estan en aprietos. Cualquier sugerencia o tema que deses que trate, con gusto lo haré. Un saludo desde Ecuador.

      Eliminar

Gracias por dejar su comentario. Lo esperamos en el siguiente post.