domingo, 30 de enero de 2011

Fecha Juliana en Cobol AS400 (Format Date)

Las bases de datos de nuestros sistemas guardan la información referente a fechas en formatos que no originen errores de cálculos en lo que se refiere a diferencias de fecha, duración, etc.
Comúnmente registran esos datos en el formato siguiente: AAAAMMDD. Pero hay sistemas en que almacenan dicha información en formato juliano, es decir AAAADDD, donde DDD equivale al número de día del año desde 1 al 365 (366 en caso de año bisiesto)  AAAA es el año.
Y a veces nos vemos en la necesidad de presentar esta información en formato más amigable para el usuario, ya sea en reportes o pantallas. O sea algo asi: DD/MM/AAAA.
En esta oportunidad voy a aplicar la conversión de dichos formatos a su equivalente en DDMMAAAA aplicándolo al lenguaje cobol. Muchas veces esto lo solucionan preparando programas adicionales (rutinas) para que devuelva su equivalencia a otro formato. Es aceptable, pero no muy beneficioso si el programa invoca la misma rutina por cada campo que contenga una fecha y hacerlo también por cada registro del archivo. Recuerda que al invocar programas externos (rutinas) es decirle al sistema que busque el programa en la lista de librerías de job y luego ejecutarlo. Hacer eso por cada invocación no resulta favorable en la performance de nuestro programa.
Les recomendaría hacer uso de las funciones integradas del ILE. Para cobol ile existe una declaración del formato de variable de tipo fecha. También la hay para la Hora. Pero bastará aplicar un ejemplo para la primera para darnos cuenta de su utilidad.
Aquí les muestro un ejemplo sencillo de cómo realizar la conversión de formatos de fechas.
WORKING-STORAGE SECTION.                            
77  Fec-Eur               Format Date  "%d%m@Y".    
77  Fec-Iso               Format Date  "@Y%m%d".    
77  Fec-Jul               Format Date  "@Y%j".      
77  Var-Fecha-Archivo     Pic 9(8) Value 20110129.  
                                                   
                                                     
PROCEDURE DIVISION.                                 
INICIO.                                             
    If    Var-Fecha-Archivo is greater than zeros   
          Move   Var-Fecha-Archivo        to  Fec-Iso
          Move   Fec-Iso                  to  Fec-Eur
          Move   Fec-Eur                  to  Fec-Jul
    End-If                                          
    Display "En formato Eur..... "  Fec-Eur.        
    Display "En formato Juliano. "  Fec-Jul.        
                                                     
    STOP RUN.                                       
Hago la consistencia del campo del archivo (Var-Fecha-Archivo) porque si este dato contiene ceros, al asignarle ceros a una variable tipo fecha, el sistema no reconoce la fecha y con ellos arroja error. Puedes enterarte de los diferentes formatos de fecha que maneja el ile en el website de IBM.

No hay comentarios:

Publicar un comentario