Opgelost: geen toekomstige datumberekening

Laatste update: 09/21/2023

Het berekenen van toekomstige datums is een veel voorkomende vereiste bij softwareontwikkeling, vooral in zakelijke toepassingen zoals facturerings- en planningssystemen. In talen als Java of Python kan deze taak eenvoudig zijn vanwege de ingebouwde bibliotheken en functies. In oudere talen zoals Cobol kan deze taak echter complexer blijken te zijn, omdat we vaak rekening moeten houden met factoren zoals schrikkeljaren.

IDENTIFICATIE AFDELING.
PROGRAMMA-ID. TOEKOMSTIGE DATA.
DATA-AFDELING.
WERK-OPSLAG SECTIE.
01 WS-CURRENT-DATUM.
05 WS-HUIDIG JAAR FOTO 9(04).
05 WS-HUIDIGE MAAND FOTO 9(02).
05 WS-HUIDIGE DAG FOTO 9(02).
01 WS-TOEKOMST-DATUM.
05 WS-TOEKOMSTIG JAAR FOTO 9(04).
05 WS-TOEKOMSTIGE MAAND FOTO 9(02).
05 WS-TOEKOMSTIGE DAG FOTO 9(02).
PROCEDURE AFDELING.
ACCEPTEER WS-CURRENT-DATE VANAF DATUM
BEreken WS-TOEKOMSTIGE-DAG = WS-HUIDIGE-DAG + 7
VERPLAATS WS-CURRENT-MAAND NAAR WS-FUTURE-MAAND
VERPLAATS WS-HUIDIG JAAR NAAR WS-TOEKOMSTIG JAAR
ALS WS-FUTURE-DAY > 30
VOEG 1 TOE AAN WS-FUTURE-MAAND
Trek 30 af van WS-FUTURE-DAY
STOP ALS
INDIEN WS-TOEKOMSTIGE MAAND > 12
VOEG 1 TOE AAN WS-TOEKOMSTIG JAAR
TREK 12 AF VAN WS-TOEKOMSTIGE MAAND
STOP ALS
DISPLAY “EEN WEEK LATER DATUM IS ” WS-TOEKOMSTIGE DATUM
STOP MET RENNEN.

Laten we deze code ontleden.

Hoe is de code opgebouwd?

Het Cobol-programma begint met de 'IDENTIFICATIEDIVISIE', een verplichte indeling in alle Cobol-programma's. De 'PROGRAM-ID'-instructie die daarop volgt, identificeert het programma. In de 'DATA DIVISION' definiëren we alle gegevens of variabelen die in het programma worden gebruikt. 'WORKING-STORAGE SECTION' is een onderverdeling van de 'DATA DIVISION' waar we onze werkvariabelen declareren: 'WS-CURRENT-DATE' en 'WS-FUTURE-DATE'. Elk van deze is verder onderverdeeld in dag-, maand- en jaargedeelten. In de 'PROCEDURE DIVISIE' coderen we de logica voor het berekenen van de toekomstige datum.

Het concept van datummanipulatie in Cobol

Ons Cobol-programma accepteert eerst de huidige datum uit het systeem. Vervolgens berekent het de toekomstige datum door 7 op te tellen bij de huidige dag. Als de toekomstige dag groter is dan 30 (wat het einde van een maand betekent), wordt de maand met 1 verhoogd en wordt 30 van de dag afgetrokken. Een soortgelijk proces wordt gebruikt om rekening te houden met het einde van het jaar. Blijkbaar is dit een vereenvoudigd voorbeeld dat geen rekening houdt met de verschillende maandlengtes of schrikkeljaren, maar het schetst het basisproces.

Concluderend: hoewel het omgaan met datums in Cobol op het eerste gezicht moeilijk kan lijken, kan dit worden vergemakkelijkt door de datum op te splitsen in kleinere componenten en zorgvuldig om te gaan met de overgang tussen dagen, maanden en jaren. Een dergelijke zorgvuldige omgang met datums herinnert ook aan de aandacht voor detail die vereist is in Cobol, en weerspiegelt het tijdperk van oorsprong van de taal en het voortdurende gebruik ervan in systemen waar precisie en nauwkeurigheid van het grootste belang zijn.

Gerelateerde berichten: