CEECBLDY:将日期转换为 COBOL 整数格式

CEECBLDY 将表示日期的字符串转换为自 1600 年 12 月 31 日以来的天数。 使用 CEECBLDY 访问日期和时间可调用服务的世纪窗口,并使用 COBOL 固有函数执行日期计算。

这项服务与 CEEDAYS 类似,但它提供的是 COBOL 整数格式的字符串,与 COBOL 固有函数兼容。

CALL CEECBLDY 语法

读取语法图跳过可视语法图CALL"CEECBLDY"USING输入日期,picture_string,输出日期,FC.
input_char_date (输入)
半字长度前缀字符串,表示符合 picture_string指定的格式的日期或时间戳记。

字符串必须包含 5 到 255 个字符 (含) 之间的字符。 input_char_date 可以包含前导或尾部空格。 对日期的解析以第一个非空白字符开始 (除非图片字符串本身包含前导空格,在这种情况下, CEECBLDY 在解析开始之前正好跳过那么多位置)。

解析有效日期 (由 picture_string中指定的日期的格式确定) 后, CEECBLDY 将忽略所有剩余字符。 有效日期范围介于并包括 1601 年 1 月 1 日至 9999 年 12 月 31 日。

picture_string (输入)
半字长度前缀字符串,指示 input_char_date中指定的日期的格式。

picture_string 中的每个字符都对应于 input_char_date中的一个字符。 例如,如果指定 MMDDYY 作为 picture_string,那么 CEECBLDY 将读取 input_char_date 060288 作为 1988 年 6 月 02 日。

如果在图片字符串中出现斜杠 (/) 之类的定界符,那么可以省略前导零。 例如,对 CEECBLDY 的以下调用都将相同的值 141502 (1988 年 6 月 02 日) 分配给 COBINTDTE:


MOVE '6/2/88' TO DATEVAL-STRING.
MOVE 6 TO DATEVAL-LENGTH.
MOVE 'MM/DD/YY' TO PICSTR-STRING.
MOVE 8 TO PICSTR-LENGTH.
CALL CEECBLDY USING DATEVAL, PICSTR, COBINTDTE, FC.

MOVE '06/02/88' TO DATEVAL-STRING.
MOVE 8 TO DATEVAL-LENGTH.
MOVE 'MM/DD/YY' TO PICSTR-STRING.
MOVE 8 TO PICSTR-LENGTH.
CALL CEECBLDY USING DATEVAL, PICSTR, COBINTDTE, FC.

MOVE '060288' TO DATEVAL-STRING.
MOVE 6 TO DATEVAL-LENGTH.
MOVE 'MMDDYY' TO PICSTR-STRING.
MOVE 6 TO PICSTR-LENGTH.
CALL CEECBLDY USING DATEVAL, PICSTR, COBINTDTE, FC.

MOVE '88154' TO DATEVAL-STRING.
MOVE 5 TO DATEVAL-LENGTH.
MOVE 'YYDDD' TO PICSTR-STRING.
MOVE 5 TO PICSTR-LENGTH.
CALL CEECBLDY USING DATEVAL, PICSTR, COBINTDTE, FC.

每当 picture_string (例如 HH:MI:SS YY/MM/DD) 中包含诸如冒号或斜杠之类的字符时,它们都将计为占位符,但在其他情况下将被忽略。

如果 picture_string 包含日语 Era 符号 <JJJJ>,那么 input_char_date 中的 YY 位置将替换为日语 Era 中的年号。 例如, 1988 年等于昭和时代的日本第 63 年。

output_Integer_date (输出)
一个 32 位二进制整数,表示 COBOL 整数日期,即自 1600 年 12 月 31 日以来的天数。 例如, 1988 年 5 月 16 日是第 141485 号日。

如果 input_char_date 不包含有效日期,那么 output_Integer_date 将设置为 0 ,并且 CEECBLDY 将终止并带有 non-CEE000 符号反馈代码。

由于 output_Integer_date 是整数,因此可以在 output_Integer_date上轻松执行日期计算。 闰年和年终异常不影响计算。

fc (输出)
指示此服务结果的 12 字节反馈代码 (可选)。
表 1. CEECBLDY 符号条件
符号反馈代码 严重性 消息号 消息文本
CEE000 0 -- 服务已成功完成。
CEE2EB 3 2507 传递到 CEEDAYS 或 CEESECS 的数据不足。 未计算 Lilian 值。
CEE2EC 3 2508 传递给 CEEDAYS 或 CEESECS 的日期值无效。
CEE2ED 3 2509 无法识别传递给 CEEDAYS 或 CEESECS 的时代。
CEE2EH 3 2513 在 CEEISEC , CEEDAYS 或 CEESECS 调用中传递的输入日期不在受支持的范围内。
CEE2EL 3 2517 未识别 CEEISEC 调用中的月份值。
CEE2EM 3 2518 在对日期/时间服务的调用中指定了无效的图片字符串。
CEE2EO 3 2520 CEEDAYS 在数字字段中检测到非数字数据,或者日期字符串与图片字符串不匹配。
CEE2EP 3 2521 传给 CEEDAYS 或 CEESECS 的 <JJJJ>、<CCCCC> 或 <CCCCCCCC> 年代内年份值为零。

使用说明

  • 仅在 COBOL 程序中调用 CEECBLDY,该程序将返回值作为 COBOL 固有函数的输入。 与 CEEDAYS 不同,CEECBLDY 没有反函数,因为它只适用于希望将日期和时间世纪窗口服务与 COBOL 固有函数一起用于日期计算的 COBOL 用户。 CEECBLDY 的逆函数由 DATE-OF-INTEGERDAY-OF-INTEGER 内部函数提供。
  • 要对 1601 年 1 月 1 日之前的日期进行计算,请在每个日期的年份后面加上 4000,将日期转换为 COBOL 整数格式,然后进行计算。 如果计算结果是日期 (相对于天数) ,请将结果转换为日期字符串并从年份中减去 4000。
  • 缺省情况下,两位数的年份位于系统日期之前 80 年开始的 100 年范围内。 因此,在 2010 年,所有两位数的年份都表示 1930 年到 2029 年之间的日期,包括 1930 年和 2029 年。 您可以使用 CEESCEN 可调用服务来更改此缺省范围。

示例


*************************************************
**                                             **
** Function: Invoke CEECBLDY callable service  **
** to convert date to COBOL integer format.    **
** This service is used when using the         **
** Century Window feature of the date and time **
** callable services mixed with COBOL          **
** intrinsic functions.                        **
**                                             **
*************************************************
 IDENTIFICATION DIVISION.
 PROGRAM-ID. CBLDY.
*
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01  CHRDATE.
     02  Vstring-length      PIC S9(4) BINARY.
     02  Vstring-text.
         03  Vstring-char    PIC X
                     OCCURS 0 TO 256 TIMES
                     DEPENDING ON Vstring-length
                         of CHRDATE.
 01  PICSTR.
     02  Vstring-length      PIC S9(4) BINARY.
     02  Vstring-text.
         03  Vstring-char    PIC X
                     OCCURS 0 TO 256 TIMES
                     DEPENDING ON Vstring-length
                         of  PICSTR.
 01  INTEGER                 PIC S9(9) BINARY.
 01  NEWDATE                 PIC 9(8).
 01  FC.
     02  Condition-Token-Value.
     COPY  CEEIGZCT.
         03  Case-1-Condition-ID.
             04  Severity    PIC S9(4) COMP.
             04  Msg-No      PIC S9(4) COMP.
         03  Case-2-Condition-ID
                 REDEFINES Case-1-Condition-ID.
             04  Class-Code  PIC S9(4) COMP.
             04  Cause-Code  PIC S9(4) COMP.
         03  Case-Sev-Ctl    PIC X.
         03  Facility-ID     PIC XXX.
     02  I-S-Info            PIC S9(9) COMP.
*
 PROCEDURE DIVISION.
 PARA-CBLDAYS.
*************************************************
** Specify input date and length               **
*************************************************
     MOVE 25 TO Vstring-length of CHRDATE.
     MOVE '1 January 00'
         to Vstring-text of CHRDATE.
*************************************************
** Specify a picture string that describes     **
** input date, and set the string's length.    **
*************************************************
     MOVE 23 TO Vstring-length of PICSTR.
     MOVE 'ZD Mmmmmmmmmmmmmmz YY'
               TO Vstring-text of PICSTR.
*************************************************
** Call CEECBLDY to convert input date to a    **
** COBOL integer date                          **
*************************************************
     CALL 'CEECBLDY' USING CHRDATE, PICSTR,
                           INTEGER, FC.
*************************************************
** If CEECBLDY runs successfully, then compute **
**     the date of the 90th day after the      **
**     input date using Intrinsic Functions    **
*************************************************
     IF CEE000 of FC  THEN
         COMPUTE INTEGER = INTEGER + 90
         COMPUTE NEWDATE = FUNCTION
             DATE-OF-INTEGER (INTEGER)
         DISPLAY NEWDATE
             ' is Lilian day: ' INTEGER
     ELSE
         DISPLAY 'CEEBLDY failed with msg '
             Msg-No of FC UPON CONSOLE
         STOP RUN
     END-IF.
*
     GOBACK.

相关参考资料
图片字符术语和字符串