我对RPG中的日期计算有一个怪异的问题。我正在尝试将Excel样式日期(自1900年以来的天数)转换为日期。这是我正在尝试的代码:
dcl-proc EXCELtoDate;
dcl-pi *n date(*iso);
datein packed(6:0);
end-pi;
if datein > 59;
return d'1899-12-30' + %days(datein);
else;
return d'1899-12-31' + %days(datein);
endif;
end-proc;
如果日期小于1940,我将收到错误RNX0114。如果按照IBM规范使用的是两位数字年份(* YMD,* DMY,* MDY,* JUL),我会理解,但我什么地方都没有。因此,我不确定为什么要使用两位数格式完成计算,或者如何强制使用四位数年份。
注意:if语句用于弥补Excel错误地将1900年视为a年的已知问题。
这是由于先前的语句调用了过程而不是过程本身。如果语句包括转换为两位数的年份,则错误似乎会报告为来自过程内而不是语句本身。例如,第一个语句中的转换将成功,但是第二个语句中的转换将失败,而end-proc语句中的转换将失败。
gooddate = %char(EXCELtoDate(14609):*usa/);
baddate = %char(EXCELtoDate(14609):*mdy/);
dcl-proc EXCELtoDate;
dcl-pi *n date(*iso);
datein packed(6:0);
end-pi;
if datein > 59;
return d'1899-12-30' + %days(datein);
else;
return d'1899-12-31' + %days(datein);
endif;
end-proc;