Cálculo com hora no Progress

Discussão em 'Progress 4GL' iniciado por jonas, Novembro 24, 2009.

  1. jonas

    jonas Membro Participativo

    Preciso fazer alguns cálculos com hora.
    O campo que armazena a hora na minha tabela é do tipo caractere.

    Há alguma função que faça este cálculo ou devo fazer na raça?
  2. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Jonas,

    Qual a versão do seu Progress?
    A partir da versão 10.1A, existe uma função chamada INTERVAL, que permite mostrar as diferenças entre data, e data e hora.

    Caso não seja, recomendo que você converta em inteiros na menor medida, e depois desfaça. Esta menor medida que falo é se sua hora for em HH:MM, utilize a conversão para minutos, se for HH:MM:SS, converta tudo para segundos. Calcule a diferença e desfaça o processo.

    Posta mais detalhes.

    T+
  3. jonas

    jonas Membro Participativo

    Deu certo.

    Muito obrigado.
  4. deproenca

    deproenca Membro Participativo

    Aproveitando este tópico, eu nunca usei essa função INTERVAL..

    como utiliza-la? Alguém tem um exemplo???
  5. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Segue um exemplo que retorna a quantidade de anos, meses, e dias entre um intervalo de data, mas a lógica também pode ser utilizada para retornar em horas, minutos e segundos.

    Código:
    def var dt-data-ini as date no-undo.
    def var dt-data-fim as date no-undo.
    def var i-Ano as int no-undo.
    def var i-Mes as int no-undo.
    def var i-Dia as int no-undo.
    def var dt-aux as date no-undo.
    
    assign dt-data-ini = date('01/06/2009')
           dt-data-fim = date('01/06/2010')
           i-Ano       = 0
           i-Mes       = 0
           i-Dia       = 0.
    
    if dt-data-fim < dt-data-ini then do:
        message "Data inicial maior do que a data final. Verifique" VIEW-AS ALERT-BOX warning BUTTONS ok title "Erro".
        return no-apply.
    end.
    
    ASSIGN dt-aux = dt-data-ini.
    
    /* Contar a quantidade de anos */
    ASSIGN i-Ano = INTERVAL (dt-data-fim, dt-aux, "years").
    IF i-Ano > 0 THEN
        ASSIGN dt-aux = ADD-INTERVAL (dt-aux, i-Ano, "years").
    
    
    /* Contar a quantidade de meses */
    ASSIGN i-Mes = INTERVAL (dt-data-fim, dt-aux, "months").
    IF i-Mes > 0 THEN
        ASSIGN dt-aux = ADD-INTERVAL (dt-aux, i-Mes, "months").
    
    /* Contar a quantidade de dias */
    ASSIGN i-Dia = INTERVAL (dt-data-fim, dt-aux, "days").
    
    message "Quantidade de ano(s): "  + string(i-Ano) skip
            "Quantidade de mes(es): " + string(i-Mes) skip
            "Quantidade de dia(s): "  + string(i-Dia)
        VIEW-AS ALERT-BOX INFO BUTTONS ok title "Resultado".
    []'s

Compartilhe esta Página