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 ...
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
more ...COBOL Compiler restricts me defining a PIC 9() variable not more than of ...