[firebase-br] Operação com horas

Carlos H. Cantu listas em warmboot.com.br
Dom Fev 20 08:59:28 -03 2011


http://www.firebase.com.br/fb/artigo.php?id=759

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

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

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






Mais detalhes sobre a lista de discussão lista