如何在RPGLE中强制日期计算以使用ISO日期并防止RNX0114错误

问题描述 投票:0回答:1

我对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年的已知问题。

ibm-midrange rpgle
1个回答
0
投票

这是由于先前的语句调用了过程而不是过程本身。如果语句包括转换为两位数的年份,则错误似乎会报告为来自过程内而不是语句本身。例如,第一个语句中的转换将成功,但是第二个语句中的转换将失败,而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;
© www.soinside.com 2019 - 2024. All rights reserved.