CEEDAYS: 将日期转换为 Lilian 格式

CEEDAYS 将表示日期的字符串转换为 Lilian 格式,该格式表示从公历 (1582 年 10 月 14 日星期五) 开始的天数。

请勿将 CEEDAYS 与 COBOL 固有函数结合使用。 将 CEECBLDY 用于使用内部函数的程序。

CALL CEEDAYS 语法

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

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

解析有效日期 (由 picture_string中指定的日期的格式确定) 后, CEEDAYS 将忽略所有剩余字符。 有效日期范围为 1582 年 10 月 15 日至 9999 年 12 月 31 日。

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

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

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


CALL CEEDAYS USING '6/2/88'  , 'MM/DD/YY', lildate, fc.
CALL CEEDAYS USING '06/02/88', 'MM/DD/YY', lildate, fc.
CALL CEEDAYS USING '060288'  , 'MMDDYY'  , lildate, fc.
CALL CEEDAYS USING '88154'   , 'YYDDD'   , lildate, fc.

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

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

output_Lilian_date (输出)
32 位二进制整数,表示 Lilian 日期,即自 1582 年 10 月 14 日以来的天数。 例如, 1988 年 5 月 16 日是第 148138 号日。

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

日期计算是在 output_Lilian_date上轻松执行的,因为它是整数。 闰年和年终异常不影响计算。

fc (输出)
指示此服务结果的 12 字节反馈代码 (可选)。
表 1. CEEDAYS 符号条件
符号反馈代码 严重性 消息号 消息文本
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> 年代内年份值为零。

使用说明

  • CEEDAYS 的逆函数是 CEEDATE ,它将 output_Lilian_date 从 Lilian 格式转换为字符格式。
  • 要对早于 1582 年 10 月 15 日的日期执行计算,请将每个日期中的年份添加 4000 ,将日期转换为 Lilian ,然后执行计算。 如果计算结果是日期 (相对于天数) ,请将结果转换为日期字符串并从年份中减去 4000。
  • 缺省情况下,两位数的年份位于系统日期之前 80 年开始的 100 年范围内。 因此,在 2010 年,所有两位数的年份都表示 1930 年到 2029 年之间的日期,包括 1930 年和 2029 年。 您可以使用可调用服务 CEESCEN 来更改缺省范围。
  • 您可以轻松地对 output_Lilian_date执行日期计算,因为它是整数。 避免跨年和年终异常。

示例


*******************************************
**                                       **
** Function: CEEDAYS - convert date to   **
**                     Lilian format     **
**                                       **
*******************************************
 IDENTIFICATION DIVISION.
 PROGRAM-ID. CBLDAYS.
 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  LILIAN                  PIC S9(9) BINARY.
 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 16 TO Vstring-length of CHRDATE.
     MOVE '1 January 2005'
         TO Vstring-text of CHRDATE.

*************************************************
** Specify a picture string that describes     **
** input date, and the picture string's length.**
*************************************************
     MOVE 25 TO Vstring-length of PICSTR.
     MOVE 'ZD Mmmmmmmmmmmmmmz YYYY'
             TO Vstring-text of PICSTR.

*************************************************
** Call CEEDAYS to convert input date to a     **
** Lilian date                                 **
*************************************************
     CALL 'CEEDAYS' USING CHRDATE, PICSTR,
                          LILIAN, FC.

*************************************************
** If CEEDAYS runs successfully, display result**
*************************************************
     IF  CEE000 of FC  THEN
         DISPLAY Vstring-text of CHRDATE
             ' is Lilian day: ' LILIAN
     ELSE
         DISPLAY 'CEEDAYS failed with msg '
             Msg-No of FC UPON CONSOLE
         STOP RUN
     END-IF.

     GOBACK.

示例:日期和时间图片字符串

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