Tiempo transcurrido

2,031 views
Skip to first unread message

rudolf heiner

unread,
Aug 2, 2012, 2:29:56 PM8/2/12
to publice...@googlegroups.com
Hola amigos foxeros,
les traigo un problema que se me presenta,
estoy tratando de calcular la hora transcurrida en base a la hora ingresada,
en el init del form hay el siguiente codigo:

***********************************************************************************************************************************************************************************************
PUBLIC nHour, nMinute, nSec

STORE HOUR(DATETIME()) TO nHour
STORE MINUTE(DATETIME()) TO nMinute
STORE SEC(DATETIME()) TO nSec

ThisForm.lblTiempoTranscurrido.Caption = PADL(ALLTRIM(STR(nHour)),2,"0") + ":" + PADL(ALLTRIM(STR(nMinute)),2,"0") + ":" + PADL(ALLTRIM(STR(nSec)),2,"0")
*********************************************************************************************************************************************************************************************** 
y en el timer lo siguiente:

********************************************************************* 
LOCAL xHour, xMinute, xSec

STORE HOUR(DATETIME()) TO xHour
STORE MINUTE(DATETIME()) TO xMinute
STORE SEC(DATETIME()) TO xSec

ThisForm.lblTimer1.Caption = TRANSFORM(DATETIME())

ThisForm.lblTiempoTranscurrido.Caption = ;
PADL(ALLTRIM(STR(xHour-nHour)),2,"0") + ":" + ;
PADL(ALLTRIM(STR(xMinute-nMinute)),2,"0") + ":" + ;
PADL(ALLTRIM(STR(xSec-nSec)),2,"0")
*********************************************************************
ahora bueno esta que corre el reloj en el lblTiempoTranscurrido pero,
aveces me bota negativo y no se como solucionarlo y creo que la resta la esta haciendo mal,
me podrian ayudar en como podria solucionarlo porfavor,
desde ya muchas gracias,
saludos y bendiciones,
rudolf heiner.

Fox Learner

unread,
Aug 2, 2012, 2:54:07 PM8/2/12
to publice...@googlegroups.com
Ups! Que lio ..

Y yo que pensé que se podía de forma sencilla hacer algo como:

Time() (actual) - Time() (viejo y guardado en algun lugar como referencia para el calculo)

Y luego teniendo el resultado, usar una funcion de conversión para presentarlo con formato de hora..

idalberto

unread,
Aug 2, 2012, 2:54:46 PM8/2/12
to publice...@googlegroups.com
Hola
 
Lo primero que tienes que hacer es verificar si estas usando el formato de 12 o 24 horas. Si usas el de 12 horas, tendras numeros negativos en ocasiones. Otra forma de lograr un resultado mas confiable es transformar los dos tiempos a segundos y la diferencia entre ambos, convertirla en horas,min y seg.
 
Saludos
 
Idalberto Gonzalez

Pablo Daniel Lissa

unread,
Aug 2, 2012, 2:58:59 PM8/2/12
to publice...@googlegroups.com
Agrego a lo que dice Idalberto que la resta entre dos valores DATETIME arroja directamente como resultado el número de segundos entre una y otra.

Saludos.
--------------------------------------------------------------------------------------

Edgar Acevedo

unread,
Aug 2, 2012, 3:15:33 PM8/2/12
to publice...@googlegroups.com
Me dejaste en que pensar con tu pregunta y se me ocurrió hacer una función para ello:

?  TIE_TRA("14:42:42", "13:20:22")

FUNCTION TIE_TRA
   PARAMETERS M.HorSt1, M.HorSt2
   TIE_TRA_RS = ""
   IF TYPE("M.HorSt1") = "C" AND TYPE("M.HorSt2") = "C"
    * Convertir las horas dadas en segundos
       M.HorSg1 = (VAL(LEFT(M.HorSt1, 2)) * 3600) + (VAL(SUBSTR(M.HorSt1, 4, 2)) * 60) + VAL(SUBSTR(M.HorSt1, 7, 2))
       M.HorSg2 = (VAL(LEFT(M.HorSt2, 2)) * 3600) + (VAL(SUBSTR(M.HorSt2, 4, 2)) * 60) + VAL(SUBSTR(M.HorSt2, 7, 2))
    * Obtener la diferencia de las horas dadas, en segundos
       M.DifSeg = ABS(M.HorSg2 - M.horSg1)
    * Convertir a formato de Hora (HH:MM:SS) los segundos de diferencia entre las horas dadas
       TIE_TRA_RS = TRANSFORM(INT(M.DifSeg / 3600), '@L 99') + ":" + TRANSFORM((MOD(M.DifSeg, 3600)/60), '@L 99') + ;
                                  ":" + TRANSFORM(MOD(MOD(M.DifSeg, 3600), 60), '@L 99')

   ENDIF
RETURN TIE_TRA_RS

Te sugiero lo siguiente:
- Para obtener la hora utiliza mejor la función  TIME() que te devuelve un valor tipo Character
- Para obtener la hora "en segundos" (la forma mas facil de trabajarla) utiliza la función SECONDS()

Salu2,


Edgar



--
 
 
 

Rudolf Johann Heiner

unread,
Aug 2, 2012, 4:09:13 PM8/2/12
to publice...@googlegroups.com
gracias edgar,
la funcion funciona perfectamente,
gracias una vez mas,
saludos,
rudolf heiner.
--
 
 
 

Rudolf Johann Heiner

unread,
Aug 2, 2012, 4:09:55 PM8/2/12
to publice...@googlegroups.com
gracias amigos por la solucion,
ya esta funcionando,
gracias,
rudolf heiner.
 
Sent: Thursday, August 02, 2012 8:57 PM
Subject: [vfp] Re: Tiempo transcurrido
 
Y si lo es.  La forma de calcular el tiempo transcurrido entre dos valores DATETIME es:
 
nSecs = tFechaFin - tFechaInicio
nHoras = INT(nSecs / 3600)
nMin = INT( (nSecs - (nHoras * 3600)) / 60 )
nSecs = nSecs - (nHoras * 3600) - (nMin * 60)
 
 
Saludos
 
Victor Espina
--
 
 
 

Luis Maria Guayan

unread,
Aug 2, 2012, 4:54:22 PM8/2/12
to publice...@googlegroups.com
Lee este artículo que seguramente será de tu interés.

--Trabajar con fechas y horas en Visual FoxPro --
http://www.portalfox.com/article.php?sid=1162




Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

--
 
 
 

Rudolf Johann Heiner

unread,
Aug 2, 2012, 5:15:15 PM8/2/12
to publice...@googlegroups.com
hola luis maria,
ya lo estoy leyendo gracias maestro,
saludos y bendiciones,
rudolf heiner.
 
Sent: Thursday, August 02, 2012 10:54 PM
Subject: Re: [vfp] Tiempo transcurrido
 
--
 
 
 

Jhonny Zambrana

unread,
Aug 3, 2012, 9:04:02 AM8/3/12
to publice...@googlegroups.com
Mmmm, es solo una sugerencai pero no te conviene usar el datetaime() eso te da la informacion en segundos transcurridos despues de lamedia noche, consulta la ayuda en Vfp.
 
Un abrazo y que estes bien.
 

El jueves, 2 de agosto de 2012 14:29:56 UTC-4, rudolf heiner escribió:

Luis Maria Guayan

unread,
Aug 3, 2012, 9:23:07 AM8/3/12
to publice...@googlegroups.com
El 03/08/2012 10:04, Jhonny Zambrana escribió:
Mmmm, es solo una sugerencai pero no te conviene usar el datetaime() eso te da la informacion en segundos transcurridos despues de lamedia noche, consulta la ayuda en Vfp.


Jhonny, SIEMPRE conviene usar el tipo de dato DateTime para hacer cálculos de diferencias de horas. El resultado es la cantidad de segundos y es muy fácil convertirlo en horas/minutos. Utilizando DateTime puedes hacer cálculos con horas de distintos días sin problemas.

Quizás tú estás confundido con SYS(2) que retorna los segundos desde la medianoche.

Nuevamente recomiendo éste artículo de PortalFox que esta muy completo con respecto al tema de fechas y horas

Victor Espina

unread,
Aug 2, 2012, 2:57:26 PM8/2/12
to publice...@googlegroups.com
Y si lo es.  La forma de calcular el tiempo transcurrido entre dos valores DATETIME es:

nSecs = tFechaFin - tFechaInicio
nHoras = INT(nSecs / 3600)
nMin = INT( (nSecs - (nHoras * 3600)) / 60 )
nSecs = nSecs - (nHoras * 3600) - (nMin * 60)


Saludos

Victor Espina


On Thursday, August 2, 2012 2:54:07 PM UTC-4, Fox Learner wrote:

Ronald Castro

unread,
Dec 11, 2018, 1:09:08 PM12/11/18
to Comunidad de Visual Foxpro en Español
disculpe quizas la demora en preguntar pero el enlace ya no existe, me podria enviar el contenido o algun otro enlace al articulos, muchas gracias señor Luis Maria

Ricardo Pina

unread,
Dec 11, 2018, 1:12:12 PM12/11/18
to Grupo VFP
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Rafael Olivares Giraldo

unread,
Nov 6, 2019, 8:26:38 AM11/6/19
to Comunidad de Visual Foxpro en Español
para que el ultimo "  nSecs  "

Luis Maria Guayan

unread,
Nov 6, 2019, 12:34:59 PM11/6/19
to Comunidad de Visual Foxpro en Español
lnSec = DATETIME(2019,11,06,10,26,38) - DATETIME(2012,08,02,13,57,26)
? lnSec, "Segundos"
lnHor = INT(lnSec / 3600)
lnMin = INT( (lnSec - (lnHor * 3600)) / 60 )
lnSec = lnSec - (lnHor * 3600) - (lnMin * 60)
? lnHor, "Horas", lnMin, "Minutos", lnSec, "Segundos"

Es el tiempo que paso del mensaje de  Victor al de Rafael :-DDDD

Luis María Guayán
Reply all
Reply to author
Forward
0 new messages