Defining date fields has always been a bit of a headache in COBOL. As a general rule, I've always defined dates as alphanumeric and initialized them to spaces. If I've needed to do arithmetic on them (unlikely, but consider the second post in the recent thread about tricks in COBOL thread209-839069), I've redefined them as PIC 9 and done appropriate numeric testing before using them as such. I think this is a reasonable approach considering that when a date is optional, users seem to prefer it be blank on reports and screens rather than zeros (although BWZ might solve this issue).
I've worked on systems where all the internal dates were serial (i.e. days since some arbitrary date such as 1/1/1900). That has some advantages, especially in comparing and calculating with dates, but how do you represent a date that is "empty"? I suppose if one bases the zero date sufficiently far in the past, one may be able to consider the zero date as "empty". However, that's not a very general solution. Also, it can be very painful to work with dates in their raw form such as in a file dump.
Modern databases deal with this problem by having a date datatype and a distinguished null value.
IBM's ILE extensions seem to be an attempt to improve date handling in COBOL, but I have too little experience with them to voice an opinion.
Perhaps Bill Klein or others can shed light on anything in the new standard that helps here?
Regards.
Glenn