Calculo em data e hora

Discussão em 'Progress 4GL' iniciado por asbahr, Agosto 24, 2011.

  1. asbahr

    asbahr Membro Participativo

    Boa Tarde

    Alguem poderia me ajudar.

    Tenho uma data e hora inicial, preciso efetuar um calculo onde ja demonstre quanto tempo ja se passou da hora inicial.

    Por exemplo uma variavel com informação inicial 24/08/2011 15:00:00 e hora final corrente (today/time)

    como este programa ficara gerando a cada tempo terminada por mim, entao podemos ter casos de 1 dia de diferença, ou minutos de diferença enfim

    Obrigado
    Ednei
  2. kirchner

    kirchner Membro Participativo Moderador

    Ednei,

    As variáveis são datetime? Caso sim é bem simples:
    Código:
    diferenca = fim - inicio.
  3. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Tenho este exemplo:

    Código:
    
    DEF VAR c-data-ini      AS DATE         LABEL "DT INI"      FORMAT "99/99/9999".
    DEF VAR c-data-fin      AS DATE         LABEL "DT FIM"      FORMAT "99/99/9999".
    
    DEF VAR c-hora-ini      AS CHARACTER    LABEL "HR INI"      FORMAT "xx:xx:xx".
    DEF VAR c-hora-fin      AS CHARACTER    LABEL "HR FIM"      FORMAT "xx:xx:xx".
    
    DEF VAR i-time-ini      AS INTEGER.
    DEF VAR i-time-fin      AS INTEGER.
    DEF VAR i-time          AS INTEGER.
    
    DEF VAR i-nr-dias       AS INTEGER.
    DEF VAR i-nr-hrs        AS INTEGER.
    DEF VAR c-nr-hrs        AS CHARACTER    FORMAT "x(08)".
    DEF VAR c-nr-hrs-tot    AS CHARACTER    FORMAT "x(08)".
    
    ASSIGN c-data-ini = TODAY
           c-data-fin = TODAY
           c-hora-ini = "000000"
           c-hora-fin = REPLACE(STRING(TIME,"hh:mm:ss"),":","").
    
    SESSION:DATA-ENTRY-RETURN = YES.
    
    REPEAT:
    
        UPDATE " "
               c-data-ini
               c-hora-ini
               " "
               c-data-fin
               c-hora-fin SKIP(2) WITH FRAME X WIDTH 400 1 COLUMNS.
    
        ASSIGN i-time-ini = (INT(SUBSTRING(c-hora-ini,1,2)) * 3600) + 
                            (INT(SUBSTRING(c-hora-ini,3,2)) * 60  ) + 
                             INT(SUBSTRING(c-hora-ini,5,2))
               i-time-fin = (INT(SUBSTRING(c-hora-fin,1,2)) * 3600) + 
                            (INT(SUBSTRING(c-hora-fin,3,2)) * 60  ) + 
                             INT(SUBSTRING(c-hora-fin,5,2)).
    
        ASSIGN i-nr-dias    = c-data-fin - c-data-ini 
               c-nr-hrs     = STRING(i-time-fin - i-time-ini,"hh:mm:ss") 
               i-nr-hrs     = ((c-data-fin - c-data-ini) * 24) + INT(SUBSTRING(c-nr-hrs,1,2))
               c-nr-hrs-tot = string(truncate(i-nr-hrs / 24,0)) + " dias, " + STRING(i-nr-hrs - truncate(i-nr-hrs / 24,0) * 24) + " horas, " + SUBSTRING(c-nr-hrs,4,2) + " minutos, " + SUBSTRING(c-nr-hrs,7,2) + " segundos".
    
        MESSAGE "Data Ini:  " STRING(c-data-ini,"99/99/9999")               "  -  "
                "Hora Ini:  " STRING(c-hora-ini,"xx:xx:xx")                 SKIP
                "Data Fin: " STRING(c-data-fin,"99/99/9999")                "  -  "
                "Hora Fin: " STRING(c-hora-fin,"xx:xx:xx")                  SKIP(1)
                "Tempo Dias/Horas: " i-nr-dias " Dias e " c-nr-hrs " Horas" SKIP(1)
                "Total Hrs: " c-nr-hrs-tot                                  VIEW-AS ALERT-BOX.
    
    END.
    
    
  4. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    Use a função interval.

    Código:
    INTERVAL function
    ---------------------
    Returns the time interval between two DATE, DATETIME, or DATETIME-TZ values as an INT64 value. 
    Syntax 
     
              INTERVAL (datetime1, datetime2, interval-unit) 
    
    datetime1
    An expression whose value is a DATE, DATETIME, or DATETIME-TZ.
    
    datetime2
    An expression whose value is a DATE, DATETIME, or DATETIME-TZ.
    
    interval-unit
    A character constant, or a character expression that evaluates to one of the following time units: ‘years’, ‘months’, ‘weeks’, ‘days’, 'hours’, ‘minutes’, ‘seconds’ or ‘milliseconds’. These values are case insensitive and may be singular.
  5. jalegria

    jalegria Membro Participativo

    Saudações a todos

    Qual a versão do Progress? Pq dependendo da vs. não tem datetime, nem interval nem nada disso.
    Se for da vs. 9 para tras.

    As datas são do tipo date e as horas estão no tipo integer? Ou é uma string no formato 'dd/mm/aaaa hh:mm:ss'?
  6. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    O que deu a entender é que ele possui um datetime.

    Mas se for o caso será realmente preciso fazer os calculos na mão.

Compartilhe esta Página