![]() |
convertir un valor time a un numerico
Hola a todos!!!
necesito algo de ayuda, tengo un campo llamado "consumo" en una tabla en de tipo ttime dentro del programa este campo trabaja asi: consumo:=hora_final-hora_inicial; hasta ahi todo va bien mi problema que el valor obtenido lo tengo que manipular aritmeticamente y no encuentro la forma ojala alguien pueda ayudarme... gracias |
Si tienes Delphi 6 o superior puedes usar la unidad DateUtils en la que puede hacer operaciones como IncDay, IncHour, IncSecond... (incrementan o decrementan), comparaciones...
Si no, puedes convertirlo en TTimeStamp que te da el tiempo en milisegundos y días... No se, si das algún ejemplo de lo que quieres hacer... |
antes que nada agradezco que hayas respondido a mi pregunta..
veraz trabajo en un programa que registrara a usuarios que harán uso de unas máquinas en base a una tarifa segun el tiempo que las usen (minutos), al momento de registrarse se captura un campo "hor_inicial" en una tabla1 (paradox) lo mismo ala hora que termina se captura el campo "hor_final" el campo "consumo" resulta de la resta de "hor_final y hor_inicial" estos tres campos son del tipo TTime, ahora bien necesito convertir el valor del campo consumo para poder multiplicarlo por el campo tarifa que es tipo numerico trabajo con delphi4 |
Aquí va una función recién salida del horno.
Lo que hace es devolver los minutos transcurridos entre dos fechas (TDateTime). Quizás deberías plantearte que el campo Consumo fuera un Integer pues almacena minutos, no una fecha ni un instante. Código:
function MinutosEntreFechas (d1, d2 : TDateTime) : Longint; |
Yo tengo la siguiente función para convertir tiempo en segundos pero variandola apenas la conviertes a minutos o a horas, la fun ción es:
function TiempoDes(tirmpo:TDateTime): string; var Hour,min,sec,msec : Word; conttirmpo:integer; begin DecodeTime(tirmpo,hour,min,sec,msec); conttirmpo:=(hour * 3600)+(Min * 60)+sec; Result := inttostr(conttirmpo); end; como puedes ver es muy simple y te devuelve un valor str, si la varias a penas te devolveria valor integer, y ya a qui la tratas como cualquier operación normal, por lo que entiendo tendrias que usarla mas o menos asi Tform1.button1Click(sender) begin label1.caption:=inttostr(strtoint(tiempodesc((table1.hotafinal.value-table1.horainicial.value)))*srttoint(edit1.text)); end; donde edit1 es el valor por el que quieres multiplicar, ojo recuerda que si es para $ deves usar strtoFloat y floattostr, espero te valga todo el tema. Un saludo desde Canarias. |
gracias
me ha funcionado muy bien lo del DecodeTime eso no lo habia intentado y con algunas variaciones en el codigo ya se solulciono el problema... un saludo!!! |
Los metodos aportados aunque validos, exigen la realizacion de operaciones superfluas, marean la perdiz por asi decirlo ;), yo sugeriria algo como:
Horas:= (TimeEnd-TimeStart)*24; Minutos:= (TimeEnd-TimeStart)*24*60; Segundos:= (TimeEnd-TimeStart)*24*60*60; Salud2 !!! |
Lo que dice Mick, aparte de elegante y eficaz, es lo más natural, mira que a veces nos rompemos la cabeza en hacer las cosas difíciles. :) :)
|
Pues yo lo siento pero prefiero utilizar el MinutesBetween, me parece más claro :p
Saludos ;) |
Marcsc dijo:
Cita:
|
Tengo dos Campos HoraFinal - HoraInicial, que debo de hacer para que me diga los minutos o horas transcurridos
|
La franja horaria es GMT +2. Ahora son las 20:28:34. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi