|
It is often desirable to validate that a user entered date is a valid date. There is really no
'out of the box' solution to this.
There are, of course, some ISPF validation methods within ISPF panel definitions although these
are fairly rudimentary and somewhat error prone, checking mainly for syntax rather than validity.
ISDATE is our solution to this issue.
ISDATE is a Rexx exec that will, not only check to see if a passed date is in a correct format, but will also check the validity of
the date. For example: that the number of days in the month is not exceeded.
We have intentionally limited the allowed year to only process years after 1753 the reason for this is explained on our
Zeller's congruence webpage. We assume that (unlike Excel) most of the time
the mainframe is used for serious business rather than just for 'fun'. Thus we see no need to make it support dates before 1753!
So how does ISDATE work and how do you use it?
The format of the call to ISDATE is:
ISDATE(DateToTest,DateFormatToUse)
|
DateToTest |
Specifies the string to be checked for a valid date. The string, unless it is DATE() format, must have the days, months and years seperated by a forward slash (/).
i.e. 12/23/2021
By DATE() Format we mean in Local Date format as specified by Rexx (DD MMM YYYY) i.e 25 JAN 1999
|
|
|
DateFormatToUse |
This is an optional parameter which can be used to change the default format from MMDDYYYY
The supported values are:
- DDMMYYYY
- MMDDYYYY - This is the default.
- YYYYDDMM
- YYYYMMDD
(Note: The date formats do not contain forward slashes)
It should be noted also that if the local time format is
being used, then DateFormatToUse will be ignored as DDMMYYYY will be used to validate the date. |
|
Return Codes From ISDATE |
|
0 - Date is valid
4 - Help displayed
8 - Date is invalid
12 - Incorrect date format
| |
Sample Calls |
|
say "try "date()
mydate = date()
rc = isdate(mydate)
if rc > 0 then do
say mydate "is not a valid date"
end
else do
say mydate "is a Valid date"
end
say "try 01/29/1964"
mydate = "01/29/1964"
rc = isdate(mydate)
if rc > 0 then do
say mydale "is not a valid date"
end
else do
say mydate "is a Valid date"
end
say "try 02/29/2004"
rc = isdate("02/29/2004")
if rc > 0 then do
say "02/29/2004 is not a valid date"
end
else do
say "02/29/2004 is a valid date"
end
say "try 2000/2/29"
rc = isdate("2000/2/29",'yyyymmdd')
if rc > 0 then do
say "2000/2/29 is not a valid date"
end
else do
say "2000/2/29 is a valid date. Leap year"
end
say "try 29/2/1900"
rc = isdate("29/2/1900",'ddmmyyyy')
if rc > 0 then do
say "29/2/1900 is not a valid date"
end
say rc | |
Resulting Output |
|
try 22 Jan 2022
22 Jan 2022 is a Valid date
try 01/29/1964
01/29/1964 is a Valid date
try 02/29/2004
02/29/2004 is a valid date
try 2000/2/29
2000/2/29 is a valid date. Leap year
try 29/2/1900
29/2/1900 is not a valid date
8
| |
ISDATE is available from the top menu under "z/OS Based Software Inventory" or from here.
It is also available directly from here.
|
|