25 de septiembre de 2006

Inversa de DTOS(), cadenas a fechas

Muchas veces tenemos algunos datos en formato año-mes-dia (AAAAMMDD), ya sea basado en la función DTOS() (Date To String) de VFP, o provenientes de algún otro sistema/lenguaje. A continuación la forma de convertir esas cadenas a tipos de datos fecha.

Lo que tendremos que hacer es simplemente usar la evaluación en línea que ofrece VFP:
**************************************************************************
* Function: STOD()
* Convierte una cadena en formato AAAMMDD al tipo de datos Date de VFP.
* Parameters: tcFecha --> La fecha en formato AAAMMDD, de tipo caracter.
* Returns:
*      + La fecha correspondiente con tipo de datos Fecha (Date de VFP)
*      + .NULL. en caso de haber error, o no cumplir con los
*        requerimentos
* Developer: Esparta Palma 
* Uso:
*     lcFecha = "20060920" && 20 de Septiembre de 2006 como cadena
*     ldFecha = STOD(lcFecha)
**************************************************************************
    Function STOD(tcFecha)
       LOCAL ldFecha
       ldFecha = .NULL.
       IF (Vartype(tcFecha)=="C") AND (NOT EMPTY(tcFecha)) ;
           AND (NOT IsNull(tcFecha))
           TRY
              ldFecha = EVALUATE("{^"+TRANSFORM(tcFecha,"@R 9999-99-99")+"}")
           CATCH TO oError
                 ?oError.Message
                ldFecha = NULL
           ENDTRY
       ENDIF
       Return ldFecha
   EndFunc
La cuestión principal es formar la fecha en el formato necesario para evaluarla, por ello el uso de la función Transform(), la cuál, hará un cambio de por ejemplo: "20060920" a "2006-09-20", a partir de ahí sumamos los caracteres iniciales y finales, quedando una cadena (siguiendo el ejemplo): "{^2006-09-20}", solo resta aplicar una evaluación en tiempo de ejecución, con lo que así tendremos nuestro tipo de datos fecha.

Nota: El código está optimizado para VFP8 y posteriores, ya que usa el control de errores en bloques TRY..CATCH, si usas una versión anterior simplemente remueve ese bloque y usa tu propia rutina de captura de errores.

Espero les sea de utilidad.

Espartaco Palma Martínez

No hay comentarios. :

Publicar un comentario