© serviceprofessionalgmbh

It makes sense to check in the program whether a date field is formally correct even when the date was entered in an ISPF panel.

Dates coming from an ISPF panel may well be wrong because it is not allowed to do calculations in the )PROC Section of panels and without them you cannot work out leap year dates.


/* REXX
   Eingabe: tt.mm.jjjj
   Ausgabe: "OK" oder entsprechende Fehlermeldung
*/
ARG CHECKDAT
MSG = "OK"
PARSE VAR CHECKDAT 1 TAG 3 P1 4 MON 6 P2 7 JAHR
SELECT
   WHEN length(checkdat) <> 10 ! P1!!P2 <> ".." ! ,
        datatype(TAG!!MON!!JAHR,"W") = 0 THEN
        MSG="Falsches Eingabeformat ,RICHTIG: TT.MM.JJJJ"
   WHEN MON < 1 ! MON > 12 THEN
        MSG="Monat falsch"
   OTHERWISE DO
        /* don't look bad */
        FEB = 28 + schaltjahr(JAHR)
        Tage_im_Jahr = "31" FEB "31 30 31 30 31 31 30 31 30 31"
        IF TAG > word(Tage_im_Jahr,MON) THEN
        MSG = "Tag falsch"
   END
END
RETURN MSG

SCHALTJAHR:
RETURN (JAHR // 4 = 0) - (JAHR // 100 = 0) + (JAHR // 400 = 0)
back to Date & Time