[firebase-br] Operação com horas

Hélio Oliveira hpensador em gmail.com
Sáb Fev 19 23:16:59 -03 2011


Desculpem colegas, após dar uma lida no livro Firebird Essecial Capítulo 
17 (Manipulando datas e horas) do Carlos Cantu, encontrei a resposta. O 
resultado é apresentado em segundos... fiz uma busca na net encontrei 
alguns códigos mostrando como transformar o resultado em horas, minutos 
e segundos, fiz algumas adaptações com a colaboração do amigo Itamar 
Bermond e cheguei a um resultado satisfatório o qual compartilharei aqui.

create or alter procedure diferenca_entre_horas (
     hora_incial time,
     hora_final time)
returns (
     permanencia time)
as
declare variable diferenca integer;
declare variable minutos integer;
declare variable segundos integer;
declare variable horas integer;
begin
   if (:hora_final < :hora_incial) then
     diferenca = (:hora_final - :hora_incial) + 86400;
   else
     diferenca = (:hora_final - :hora_incial);
   segundos = :diferenca - :diferenca / 60 * 60;
   diferenca = (:diferenca - :segundos) / 60;
   minutos = :diferenca - :diferenca / 60 * 60;
   diferenca = (:diferenca - :minutos) / 60;
   horas = :diferenca - :diferenca / 60 * 60;
   permanencia = cast((horas || ':' || :minutos || ':' || :segundos) as 
time);
   suspend;
end


-- 
[]'s,

Hélio Oliveira
Bel. Ciência da Computação
Técnico em Contabilidade
e-mail : hpensador em gmail.com
Skype : hpensador
www.hpensador.net
(71) 9975-9176





Mais detalhes sobre a lista de discussão lista