3 de abril de 2001

Convertir una variable DATE() a caracter no ambiguo

Con la función DtoCNA() (Date to Caracter no ambiguo) podemos convertir una fecha a una cadena no ambigua para su lectura o impresión.

Ejemplo:
*--- Español en formato largo y Separador "-"
? DTOCNA({07/10/2000}, "E", "L", "-")
   -> 07-OCT-2000

*--- Alemán en formato corto y Separador "/"
? DTOCNA({07/10/2000}, "A", "C", "/")
   -> 07/OKT/00
*-----------------------------------------------------------------
* FUNCTION DTOCNA(tdFecha, tcLeng, tcLong, tcSep)
*-----------------------------------------------------------------
* Date TO Caracter No Ambiguo
* PARAMETROS:
*  tdFecha: Fecha a convertir. Default = DATE()
*  tcLeng:
*    [E]spañol [I]nglés [F]rancés [A]lemán
*    i[T]aliano [P]ortugués
*  tcLong:
*    [L]argo: 12 ENE 2000 ó [C]orto: 01 ENE 00
*  tcSep:
*    Caracter separador del dia-mes-año. Default = " "
*    Si tcSep = .NULL. no tiene separador
* RETORNO: Caracter
* USO: ? DTOCNA({01/01/1999}, "I", "C", "-") -> 01-JAN-99
* AUTOR: LMG - 2000/06/15
*-----------------------------------------------------------------
FUNCTION DTOCNA(tdFecha, tcLeng, tcLong, tcSep)
  LOCAL lcMes, lnI
  IF EMPTY(tdFecha) OR NOT VARTYPE(tdFecha) $ "DT"
    tdFecha = DATE()
  ENDIF
  IF EMPTY(tcLeng) OR NOT UPPER(tcLeng) $ "EIFATP"
    tcLeng = "E"
  ELSE
    tcLeng = UPPER(tcLeng)
  ENDIF
  IF EMPTY(tcLong) OR NOT UPPER(tcLong) $ "CL"
    tcLong = "L"
  ELSE
    tcLong = UPPER(tcLong)
  ENDIF
  IF EMPTY(tcSep)
    tcSep = " "
  ELSE
    IF ISNULL(tcSep)
      tcSep = ""
    ENDIF
  ENDIF
  lnI = (MONTH(tdFecha)* 3) - 2
  DO CASE
    CASE tcLeng = "E"
      lcMes = SUBS("ENEFEBMARABRMAYJUNJULAGOSETOCTNOVDIC", lnI, 3)
    CASE tcLeng = "I"
      lcMes = SUBS("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", lnI, 3)
    CASE tcLeng = "F"
      lcMes = SUBS("JANFEVMARAVRMAIJUNJULAOUSEPOCTNOVDEC", lnI, 3)
    CASE tcLeng = "A"
      lcMes = SUBS("JANFEBMARAPRMAIJUNJULAUGSEPOKTNOVDEZ", lnI, 3)
    CASE tcLeng = "T"
      lcMes = SUBS("GENFEBMARAPRMAGGIULUGAGOSETOTTNOVDIC", lnI, 3)
    CASE tcLeng = "P"
      lcMes = SUBS("JANFEVMARABRMAIJUNJULAGOSETOUTNOVDEZ", lnI, 3)
  ENDCASE
  RETURN TRAN(DAY(tdFecha), "@L 99") + tcSep + lcMes + tcSep + ;
    IIF(tcLong = "L", TRAN(YEAR(tdFecha), "@L 9999"), ;
    TRAN(YEAR(tdFecha) % 100, "@L 99"))
ENDFUNC

*-----------------------------------------------------------------
Luis María Guayán

No hay comentarios. :

Publicar un comentario