Manejo de horas en formato String - Java

Hola a todos, en algunas ocasiones nos hemos encontrado que por error o por decisión guardan las horas en formato String y necesitamos realizar operaciones como saber si está en un rango o no, para ellos poseemos algunas funciones a nivel de base de datos pero y si no contamos con ellas y debemos manejar la lógica desde el código, pues bien si está es tu situación puede ayudarte lo siguiente:

El siguiente código fue levantado en Java pero la idea puede ser escrita y hasta mejorada en otros lenguajes:

Cuando tenemos una hora y un minuto por separado y necesitamos convertilo en hora de doce horas el siguiente código ayudará:

private String castHourMinZero(String hour, String min) {
    String result = null;
    
    if(Integer.parseInt(hour) < 10)
        result = "0" + hour + ":";
    else
        result = hour + ":";
    
    if(Integer.parseInt(min) < 10)
        result += "0" + min;
    else
        result += min;
    
    return result;
}

Ahora bien, si tenemos la situación de validar un rango de horas para saber si está dentro de unas horas establecidas podemos ayudarnos con lo siguiente:

--Validar hora y rango de horas
private boolean validateHour(String horaInicial,String minInicial,String horaFinal,String minFinal) {
        boolean result = false;   
        String minIni = null;
        String minFin = null;
        hourIni = 0;
        hourEnd = 0;

        if(Integer.parseInt(minInicial) < 10)
            minIni = "0" + minInicial;
        else
            minIni = minInicial;
       
        if(Integer.parseInt(minFinal) < 10)
            minFin = "0" + minFinal;
        else
            minFin = minFinal;
       
        hourIni = Integer.parseInt(horaInicial + minIni);
        hourEnd = Integer.parseInt(horaFinal + minFin);
       
        if(hourIni >= hourEnd)
            this.statusMessages.addFromResourceBundle(Severity.ERROR,"La hora inicial es igual o superior a la hora final");
        else if(hourIni >= 1601 || hourEnd >= 1601)
            this.statusMessages.addFromResourceBundle(Severity.ERROR,"La hora no puede ser superior a las 16:00 horas");
              return result;
    }

El anterior se utiliza para mensajes el componente de JBoss Seam "statusMessages.addFromResourceBundle", sin embargo ese fragmento lo pueden modificar por la salida de mensajes que tengan configurado.

Espero les sea de ayuda y que puedan usarlo como guía para ajustarlo a sus necesidades, hasta una próxima ocasión.

Comentarios