A Super Way to Display a Date
February 18, 2004 Hey, Ted
Here’s a subprocedure I wrote that you might want to publish in your newsletter. My routine uses the ILE CEE APIs to format a date as day of week, month name, day, and year, like this:
Wednesday, February 18, 2004
I use the CEEDAYS API to convert a date to Lilian date format, which is the number of days elapsed since October 14, 1582. Then I use the CEEDATE API to format the Lilian date into a character string. In the case of an error (for example, a date before October 14, 1582), I return the ISO character representation of the date.
–Tim
Thanks for the code, Tim. For publication, I have implemented your routine as an RPG module. Any reader who wants to use this procedure would probably do well to make it part of a service program.
First, here’s the prototype, which I stored in member FULLDATE, in source physical file PROTOTYPES, in one of my libraries on the Netshare400 machine.
D FullDate PR 32A D Date D Value
And here’s the module source, which I put in member FULLDATE, in QRPGLESRC.
H NoMain /Copy Prototypes,FullDate P FullDate B Export D PI 32A D dIn D Value * prototypes to date routines D CEEDAYS PR ExtProc('CEEDAYS') OpDesc D DateString 32A Const D FormatString 32A Const D LilianDate 10I 0 D Error 12A Options(*Omit) D D CEEDATE PR ExtProc('CEEDATE') OpDesc D LilianDate 10I 0 Const D FormatString 32A Const D DateString 32A D Error 12A Options(*Omit) D D* local D sWorkDate S 8A D sDateInWords S 32A D nLil S 10I 0 D sFormat S 32A /free sFormat = 'Wwwwwwwwwz, Mmmmmmmmmz ZD, YYYY'; sWorkDate = %char(dIn: *iso0); Callp(e) CEEDAYS (sWorkDate: 'YYYYMMDD': nLil: *Omit); If %error; Return %char(dIn: *iso); Endif; Callp(e) CEEDATE (nLil: sFormat: sDateInWords: *Omit); If %Error; Return %char(dIn: *iso); Endif; Return sDateInWords; /end-free P e
Here’s a snippet of code from a calling program, showing how to invoke the subprocedure.
D dDate s d D dFmt s 32a C eval dFmt = FullDate(dDate)
I like the CEE APIs, especially CEEDATE, which can display a date in any of a wide variety of formats. See the Date and Time APIs page, at the iSeries Information Center, for more details.
COBOL programmers who are interested in using these APIs can find some information on MIDRANGE dot COM.
–Ted