MainframeMaster

COBOL Current Date Function

The CURRENT-DATE function provides access to the current system date and time. Learn to use this intrinsic function for date/time operations, formatting, and calculations in business applications.

Basic CURRENT-DATE Usage

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 FORMATTED-DATE PIC X(10). 01 FORMATTED-TIME PIC X(8). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME DISPLAY 'Current date/time: ' CURRENT-DATE-TIME *> Extract date portion (YYYYMMDD) MOVE CURRENT-DATE-TIME(1:8) TO FORMATTED-DATE DISPLAY 'Date: ' FORMATTED-DATE *> Extract time portion (HHMMSS) MOVE CURRENT-DATE-TIME(9:6) TO FORMATTED-TIME DISPLAY 'Time: ' FORMATTED-TIME.

CURRENT-DATE returns a 14-character string in YYYYMMDDHHMMSS format. Use reference modification to extract date (positions 1-8) and time (positions 9-14) components for processing.

Date Formatting

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 FORMATTED-DATE. 05 YEAR PIC X(4). 05 MONTH PIC X(2). 05 DAY PIC X(2). 01 DISPLAY-DATE PIC X(10). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME *> Parse date components MOVE CURRENT-DATE-TIME(1:4) TO YEAR MOVE CURRENT-DATE-TIME(5:2) TO MONTH MOVE CURRENT-DATE-TIME(7:2) TO DAY *> Format as MM/DD/YYYY STRING MONTH '/' DAY '/' YEAR INTO DISPLAY-DATE END-STRING DISPLAY 'Formatted date: ' DISPLAY-DATE.

Parse date components using reference modification and format them using STRING statements. Create user-friendly date formats like MM/DD/YYYY or DD-MM-YYYY for display purposes.

Time Formatting

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 FORMATTED-TIME. 05 HOUR PIC X(2). 05 MINUTE PIC X(2). 05 SECOND PIC X(2). 01 DISPLAY-TIME PIC X(8). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME *> Parse time components MOVE CURRENT-DATE-TIME(9:2) TO HOUR MOVE CURRENT-DATE-TIME(11:2) TO MINUTE MOVE CURRENT-DATE-TIME(13:2) TO SECOND *> Format as HH:MM:SS STRING HOUR ':' MINUTE ':' SECOND INTO DISPLAY-TIME END-STRING DISPLAY 'Formatted time: ' DISPLAY-TIME.

Extract time components (hour, minute, second) from positions 9-14 of the CURRENT-DATE result. Format time in readable formats like HH:MM:SS for display and logging purposes.

Date Calculations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 CURRENT-DATE-NUM PIC 9(8). 01 FUTURE-DATE-NUM PIC 9(8). 01 DAYS-DIFFERENCE PIC S9(5). 01 FUTURE-DATE PIC X(8). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME MOVE CURRENT-DATE-TIME(1:8) TO CURRENT-DATE-NUM *> Calculate date 30 days in the future COMPUTE FUTURE-DATE-NUM = FUNCTION INTEGER-OF-DATE(CURRENT-DATE-NUM) + 30 MOVE FUNCTION DATE-OF-INTEGER(FUTURE-DATE-NUM) TO FUTURE-DATE-NUM MOVE FUTURE-DATE-NUM TO FUTURE-DATE DISPLAY 'Current date: ' CURRENT-DATE-NUM DISPLAY 'Future date: ' FUTURE-DATE.

Perform date calculations by converting dates to integer values using INTEGER-OF-DATE, performing arithmetic operations, then converting back using DATE-OF-INTEGER. This enables date arithmetic.

Age Calculation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 CURRENT-DATE-NUM PIC 9(8). 01 BIRTH-DATE PIC 9(8) VALUE 19900101. 01 CURRENT-YEAR PIC 9(4). 01 BIRTH-YEAR PIC 9(4). 01 AGE PIC 9(3). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME MOVE CURRENT-DATE-TIME(1:8) TO CURRENT-DATE-NUM *> Extract years MOVE CURRENT-DATE-NUM(1:4) TO CURRENT-YEAR MOVE BIRTH-DATE(1:4) TO BIRTH-YEAR *> Calculate age COMPUTE AGE = CURRENT-YEAR - BIRTH-YEAR DISPLAY 'Current year: ' CURRENT-YEAR DISPLAY 'Birth year: ' BIRTH-YEAR DISPLAY 'Age: ' AGE.

Calculate age by extracting year components from current date and birth date. Use simple arithmetic to determine age. For precise age calculation, consider month and day components as well.

Business Date Operations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 CURRENT-DATE-NUM PIC 9(8). 01 DUE-DATE PIC 9(8). 01 DAYS-OVERDUE PIC S9(5). 01 OVERDUE-FLAG PIC X VALUE 'N'. PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME MOVE CURRENT-DATE-TIME(1:8) TO CURRENT-DATE-NUM *> Calculate days overdue COMPUTE DAYS-OVERDUE = FUNCTION INTEGER-OF-DATE(CURRENT-DATE-NUM) - FUNCTION INTEGER-OF-DATE(DUE-DATE) IF DAYS-OVERDUE > 0 MOVE 'Y' TO OVERDUE-FLAG DISPLAY 'Account is ' DAYS-OVERDUE ' days overdue' ELSE DISPLAY 'Account is current' END-IF.

Use CURRENT-DATE for business operations like calculating overdue accounts, payment due dates, and account aging. Compare current date with due dates to determine account status.

Timestamp Generation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 TIMESTAMP PIC X(19). 01 LOG-ENTRY PIC X(100). PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME *> Create timestamp for logging STRING CURRENT-DATE-TIME(1:4) '-' CURRENT-DATE-TIME(5:2) '-' CURRENT-DATE-TIME(7:2) ' ' CURRENT-DATE-TIME(9:2) ':' CURRENT-DATE-TIME(11:2) ':' CURRENT-DATE-TIME(13:2) INTO TIMESTAMP END-STRING STRING TIMESTAMP ' - ' 'Transaction processed' INTO LOG-ENTRY END-STRING DISPLAY LOG-ENTRY.

Generate timestamps for logging and audit trails. Format the CURRENT-DATE result into readable timestamp format (YYYY-MM-DD HH:MM:SS) for inclusion in log entries and audit records.

Date Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
WORKING-STORAGE SECTION. 01 CURRENT-DATE-TIME PIC X(14). 01 CURRENT-DATE-NUM PIC 9(8). 01 INPUT-DATE PIC 9(8). 01 DATE-VALID PIC X VALUE 'N'. PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME MOVE CURRENT-DATE-TIME(1:8) TO CURRENT-DATE-NUM *> Validate input date is not in the future IF INPUT-DATE > CURRENT-DATE-NUM DISPLAY 'Error: Date cannot be in the future' MOVE 'N' TO DATE-VALID ELSE MOVE 'Y' TO DATE-VALID END-IF. *> Validate date is not too old (more than 10 years) COMPUTE CURRENT-DATE-NUM = FUNCTION INTEGER-OF-DATE(CURRENT-DATE-NUM) - 3650 MOVE FUNCTION DATE-OF-INTEGER(CURRENT-DATE-NUM) TO CURRENT-DATE-NUM IF INPUT-DATE < CURRENT-DATE-NUM DISPLAY 'Error: Date is too old' MOVE 'N' TO DATE-VALID END-IF.

Use CURRENT-DATE for date validation. Check that input dates are not in the future, not too old, or within acceptable business ranges. This ensures data integrity in date-sensitive applications.