PDA

Ver la Versión Completa : Formato de TimeStamp


mjjj
14-10-2015, 23:30:21
Estimados, utilizo Firebird 2.5 y necesito dar formato a una diferencia de 2 campos tipo timestamp.

Por ejemplo si la diferencia es de un día, 2 horas y 45 minutos, que el formato sea 1d 2h 45m.
Si es de 5 horas, que le formato sea 5h
Si es de menos de 1 minutos, que el formato sea <1m

He probado varios código, pero no me está resultado.


select CAST(termino AS time) - CAST(comienzo AS time) as registro from Tabla

select cast(datediff(second, comienzo, termino) as time) as registro from Tabla


Alguna idea como se resuelve esto??

Gracias

Casimiro Notevi
14-10-2015, 23:31:44
No le corresponde a la base de datos dar formato a un valor, sino a delphi.

mjjj
15-10-2015, 00:09:35
Perfecto... Y como hago eso?? 😁

En la definicion de los campos persistentes del query??
Igual el formato es más complejo que un simple separador de miles...

Como lo hago ??

AgustinOrtu
15-10-2015, 01:35:58
Una opcion es el OnGetText del TField. Tambien podes levantar el valor del campo (AsDateTime) y mandar todo a una funcion y usar alguna variante de FormatDateTime, o DateToStr o una funcion propia

Combat-F2D
15-10-2015, 07:18:17
y no podrias realizarlo devolviendo una string mediante un store procedure???

mjjj
15-10-2015, 17:50:08
Finalmente lo resolví con el siguiente código en evento onGetText del campo del query.


procedure Tform.IBQuery1REGISTROGetText(Sender: TField;
var Text: string; DisplayText: Boolean);
var dias, horas, minutos, segundos: integer;
begin
if sender.AsString <> '' then
begin
segundos := sender.AsInteger;

dias := segundos div 86400;
segundos := segundos - dias * 86400;

horas := segundos div 3600;
segundos := segundos - horas * 3600;

minutos := segundos div 60;
segundos := segundos - minutos * 60;

if dias > 0 then text := inttostr(dias)+'d';
if horas > 0 then text := text + ' '+inttostr(horas)+'h';
if minutos > 0 then text := text + ' '+inttostr(minutos)+'m';

if text = '' then
if segundos > 0 then text := '<1m';
end;
end;


Gracias y saludos.