traer una fecha y hora con milisegundos en formato yyyyMMddHHmmssSSS

127 views
Skip to first unread message

Marcelo Barberis

unread,
Apr 24, 2021, 11:31:35 PM4/24/21
to publicesvfoxpro
Hola buenas noches, aqui se esta implementando un sistema de facturacion en linea similar a lo que ya esta implementado en otros paises con la renta, nos piden que le pasemos como parametro la fecha con un formato yyyyMMddHHmmssSSS tipo numerico y una longitud de 17

Otra consulta: en unos de los tantos reportes nos piden que le pasemos "La fecha actual en formato UTC extendido sin zona horaria"

Desde ya le agradesco cualquier tipo de comentario o alguna solucion o ejemplo que me pueda ayudar a resolver estos temas

--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Francisco Lorente

unread,
Apr 25, 2021, 4:58:48 AM4/25/21
to Comunidad de Visual Foxpro en Español
Hola Alex.

Si pretendes obtener la fecha y hora actual, esta función te puede servir:

Function Now()
    Local m.ltDate, m.lnMiliSec, m.lcResult
    
    m.ltDate = Datetime()
    m.lnMiliSec = (Seconds() - Int(Seconds())) * 1000
    m.lcResult = Transform(Year(m.ltDate), '@L ####') + Transform(Month(m.ltDate), '@L ##') + Transform(Day(m.ltDate), '@L ##');
         + Transform(Hour(m.ltDate), '@L ##') + Transform(Minute(m.ltDate), '@L ##') + Transform(Sec(m.ltDate), '@L ##') + Transform(m.lnMiliSec, '@L ###')
    Return m.lcResult
EndFunc

Para obterner la hora UTC debes sumarle o restarle al Datetime las horas de desfase que tenga tu zona con respecto a estandar UTC

Por ejemplo, para añadir 2 hora sería:

    m.ltDate = Datetime()  + (2 * 3600)    && 60 minutos * 60 segundos (segundos que tiene una hora)

Saludos.
Francisco Lorente.
Murcia. España.

Daniel Burgos

unread,
Apr 25, 2021, 12:00:23 PM4/25/21
to Comunidad de Visual Foxpro en Español
Buen día Marcelo
Para representar la fecha en ese formatos podrías usar también:

? TTOC(DATETIME(),1)+TRANSFORM(INT((SECONDS() - INT(SECONDS()))*1000))

Mira en la ayuda las funciones TTOC() y CTOT()

Atentamente
Daniel Burgos
Mar del Plata, Argentina

Zarlu

unread,
Apr 25, 2021, 12:47:04 PM4/25/21
to Comunidad de Visual Foxpro en Español
Buenos días alexmarce40!

De algún lugar de la red:
*----------- DECLARACIONES API
*----------- Kernel32
DECLARE LONG GetLocalTime IN Kernel32;
    STRING    @lpSystemTime

DECLARE LONG GetSystemTime IN Kernel32;
    STRING    @lpSystemTime

DECLARE LONG GetTimeZoneInformation IN Kernel32;
    STRING    @lpTimeZoneInformation

DECLARE LONG FileTimeToSystemTime IN Kernel32;
    LONG     lpFileTime,;
    STRING    @lpSystemTime

*----------- MAIN
CLEAR
lpSystemTime=SPACE(16)
GetLocalTime(@lpSystemTime)
ltHoraLocal = GetBinatyToDateTime(lpSystemTime)
? "Hora local: " + TRANSFORM(ltHoraLocal)
?
lpSystemTime=SPACE(16)
GetSystemTime(@lpSystemTime)
ltHoraUniveral = GetBinatyToDateTime(lpSystemTime)
? "Hora Universal: " + TRANSFORM(ltHoraUniveral)
?
lnSeconds = (ltHoraUniveral - ltHoraLocal)
lnHourDif = PADL(TRANSFORM(INT(lnSeconds/3600)), 2, "0")
lnMinuDif = PADL(TRANSFORM(INT(((lnSeconds-(VAL(lnHourDif)*3600))/60))), 2, "0")
? "Hora con Zona Horaria: " + TTOC(ltHoraLocal,3) +"-"+ lnHourDIf +":"+ lnMinuDif
?
? "Hora con milisegundos: " + GetBinatyToDateTime(lpSystemTime, .T.)
?
lpTimeZoneInformation = SPACE(250)
nReturn = GetTimeZoneInformation(@lpTimeZoneInformation)
? nReturn
? lpTimeZoneInformation

*----------- REGION DE PROCEDURES
PROCEDURE GetBinatyToDateTime(tbSystemTime, tlMiliSeconds)
    *----- Decodifica cadena de bytes Fecha-Hora, con o sin milisegundos
    wYear    = CTOBIN(SUBSTR(tbSystemTime,1,2),"2RS")
    wMonth    = CTOBIN(SUBSTR(tbSystemTime,3,2),"2RS")
    wDayWeek = CTOBIN(SUBSTR(tbSystemTime,5,2),"2RS")
    wDay     = CTOBIN(SUBSTR(tbSystemTime,7,2),"2RS")
    wHour     = CTOBIN(SUBSTR(tbSystemTime,9,2),"2RS")
    wMinute  = CTOBIN(SUBSTR(tbSystemTime,11,2),"2RS")
    wSecond  = CTOBIN(SUBSTR(tbSystemTime,13,2),"2RS")
    wMilSec  = CTOBIN(SUBSTR(tbSystemTime,15,2),"2RS")
    IF tlMiliSeconds
        ltDateTime = TTOC(DATETIME(wYear, wMonth, wDay, wHour, wMinute, wSecond),3)+":"+PADL(wMilSec,4,"0")
    ELSE
        ltDateTime = DATETIME(wYear, wMonth, wDay, wHour, wMinute, wSecond)
    ENDIF
    RETURN ltDateTime
ENDPROC

Para UTC checa sobre la librería "vfp2c32.fll" quizá sirva para lo que requieres.

Suerte
zarlu
Chetumal, Quintana Roo, México

Marcelo Barberis

unread,
Apr 25, 2021, 10:25:54 PM4/25/21
to publicesvfoxpro
hola buenas noches
he leido sus comentarios y me sirvieron mucho, ahora tambien he buscado la libreria vfp2c32.fll con su manual para saber que cosas se pueden hacer pero hasta el momento todavia no he podido encontrarla, pero seguire buscando.

De antemano gracias por sus comentarios de ayuda.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/c7eb6a4a-f395-4ff6-93fc-757a58d5ad6cn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages