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) |
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)) |