PL/I和COBOL如何取得当天的日期

在Mainframe上做开发会经常遇到用PL/I或者COBOL取得当天的日期,对于PL/I,一般的公司都采取如下的做法:

DCL PIC_TODAY            PIC'999999' INIT(0);
PIC_TODAY  = DATE;
IF SUBSTR(DATE,1,2) > '50'                
  THEN TODAYS_DATE = 19000000 + PIC_TODAY;
  ELSE TODAYS_DATE = 20000000 + PIC_TODAY;

我所在的公司也是这种写法来获得YYYYMMDD格式的当日日期,很明显这种写法代码的寿命只有几十年了,相比之下COBOL获得YYYYMMDD格式的当日日期就显得方便得多,一个ACCEPT语句即可:

WORKING-STORAGE SECTION.
01 TODAYS-DATE                          PIC 9(08).
.
.
.
PROCEDURE DIVISION.
ACCEPT TODAYS ...
more ...

COBOL程序编译报错GYDS1145-S

今天编译一个COBOL老程序的时候报错:IGYDS1145-S

IGYDS1145-S More than 18 digit positions were specified in a "PICTURE" string for a numeric or numeric edited item.
A "PICTURE" string of "S9(18)" was assumed.

原因是老的编译器不支持超过18位的长度变量,但是新的编译器支持。这个帖子里有讨论得更多。 http://ibmmainframes.com/post-9087.html

COBOL Compiler restricts me defining a PIC 9() variable not more than of ...

more ...