Ejemplo:
lc = SYS(2015) ? Inv2015(lc)
*------------------------------- * FUNCTION Inv2015(tcCadena) *------------------------------- * Función que invierte el retorno de SYS(2015) * USO: Inv2015("_0AB0123AB") * RETORNA: Caracter "DD/MM/AAAA HH:MM:SS.mmm" *------------------------------- FUNCTION Inv2015(tcCadena) LOCAL lnDia, lnAnio lnDia = B36TOB10(SUBS(tcCadena, 2, 3)) lnAnio = INT(lnDia / 367) lnDia = MOD(lnDia, 367) SET STRICTDATE TO 0 RETURN DTOC(EVAL("{^"+STR(lnAnio,2)+"/01/01}") ; + lnDia - 1) + " " ; + S2HMSm(B36TOB10(SUBS(tcCadena, 5, 6))/1000) ENDFUNC *------------------------------- * FUNCTION B36TOB10(tcN36) *------------------------------- * Función que pasa un número de base 36 a base 10 * Usada por Inv2015() * RETORNA: Numérico *------------------------------- FUNCTION B36TOB10(tcN36) LOCAL lnN10, lcChr, lnLen, lnI, lnAux tcN36 = ALLTRIM(UPPER(tcN36)) lnLen = LEN(tcN36) lnN10 = 0 lnI = 1 FOR lnI = 1 TO lnLen lcChr = SUBS(tcN36, lnI, 1) lnAux = ASC(lcChr)-IIF(lcChr < 'A', 48, 55) lnN10 = lnN10 + lnAux * 36^(lnLen-lnI) ENDFOR RETURN INT(lnN10) ENDFUNC *------------------------------- * FUNCTION S2HMSm(tnSeg) *------------------------------- * Transforma segundos a formato HH:MM:SS.mmm * Usada por Inv2015() * RETORNA: Caracter 'HH:MM:SS.mmm' *------------------------------- FUNCTION S2HMSm(tnSeg) LOCAL lnHor, lnMin, lnSeg, lnMil lnHor = INT(tnSeg/3600) lnMin = INT(((tnSeg - (lnHor*3600))/60)) lnSeg = MOD(tnSeg, 60) lnMil = (tnSeg - INT(tnSeg))*1000 RETURN TRANSFORM(lnHor, "@L 99") + ":" + ; TRANSFORM(lnMin, "@L 99") + ":" + ; TRANSFORM(lnSeg, "@L 99") + "." + ; TRANSFORM(lnMil, "@L 999") ENDFUNC *-------------------------------Luis María Guayán
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.