Menu

COBOL - Função data


A função intrínseca mais útil é CURRENT-DATE, que substitui ACCEPT DATE e ACCEPT TIME. CURRENT-DATE é compatível com Y2K, com um ano de 4 dígitos. Esta função retorna um campo alfanumérico de 20 caracteres que é apresentado da seguinte forma.

01  WS-CURRENT-DATE-FIELDS.
    05  WS-CURRENT-DATE.
        10  WS-CURRENT-YEAR    PIC  9(4).
        10  WS-CURRENT-MONTH   PIC  9(2).
        10  WS-CURRENT-DAY     PIC  9(2).
    05  WS-CURRENT-TIME.
        10  WS-CURRENT-HOUR    PIC  9(2).
        10  WS-CURRENT-MINUTE  PIC  9(2).
        10  WS-CURRENT-SECOND  PIC  9(2).
        10  WS-CURRENT-MS      PIC  9(2).
    05  WS-DIFF-FROM-GMT       PIC S9(4).

Portanto, você pode não apenas reduzir o tempo até o milissegundo, mas também obter a diferença entre o seu tempo e o horário de Greenwich.

A função é usada em um MOVE.

MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-FIELDS

Exemplo de data COBOL:

Você precisa saber que data é daqui a 150 dias (e esse tipo de coisa acontece com mais frequência do que você imagina)? Converta hoje para uma data inteira, adicione 150 a ela e converta de volta. Chega de verificar quais meses você está passando para ver se é um mês de 30 dias ou 31 dias. Não há mais cálculos de anos bissextos.

01  WS-TODAY         PIC 9(8).
01  WS-FUTURE-DATE   PIC 9(8).
....
MOVE FUNCTION CURRENT-DATE (1:8) TO WS-TODAY.
COMPUTE WS-FUTURE-DATE = FUNCTION INTEGER-OF-DATE (WS-TODAY) + 150

Converter de formatos gregoriano para inteiro:

COMPUTE WS-INTEGER-DATE = FUNCTION INTEGER-OF-DATE (WS-DATE)

Converter dos formatos inteiro para gregoriano:

COMPUTE WS-DATE = FUNCTION DATE-OF-INTEGER (WS-INT-DATE)

Converter dos formatos Julian para Integer:

COMPUTE WS-INTEGER-DATE = FUNCTION INTEGER-OF-DAY (WS-JUL-DATE)

Converter dos formatos inteiro para juliano:

COMPUTE WS-JULIAN-DATE = FUNCTION DAY-OF-INTEGER (WS-INT-DATE)

  • Espera-se que todas as datas gregorianas e julianas tenham anos de 4 dígitos.
  • COMPUTE está OK porque estamos usando apenas números inteiros aqui.

Quantos dias entre duas datas?

COMPUTE WS-DAYS = FUNCTION INTEGER-OF-DATE (WS-DATE-1) - FUNCTION INTEGER-OF-DATE (WS-DATE-2)

A conversão entre os formatos gregoriano e juliano costumava ser uma dor também. Agora é fácil como abaixo.:

COMPUTE WS-DATE = FUNCTION DATE-OF-INTEGER (FUNCTION INTEGER-OF-DAY (WS-JULIAN))

Vejamos exemplos COBOL - Exemplo 1, Exemplo 2