获取CICS的时间信息也是关于CICS的一项最基本的应用。该应用主要分为两步操作。其中第一步是通过ASKTIME得到时间的数据。第二步是通过FORMATTIME得到时间的格式。例如,以下代码将根据用户的请求而获得相应的时间信息:
IDENTIFICATION DIVISION.
PROGRAM-ID. TIMEPGM.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WKAREA.
05 LEN PIC S9(4) USAGE IS COMP.
05 ERR-CODE PIC S9(8) COMP.
05 GETTIME PIC S9(15) COMP-3. /*该变量用于接受时间数据*/
05 TIMEOUT PIC X(8). /*该变量用于接受时间格式,并输出时间信息*/
01 INAREA.
05 TRANID PIC X(4).
05 FILLER PIC X.
05 REQUEST PIC X(4).
01 MSG PIC X(80).
*
PROCEDURE DIVISION.
MOVE 9 TO LEN.
EXEC CICS RECEIVE INTO(INAREA)
LENGTH(LEN)
RESP(ERR-CODE)
END-EXEC
IF ERR-CODE = DFHRESP(LENGERR)
MOVE ‘INPUT DATA TOO LONG: MAX IS 9 CHARS’
TO MSG
EXEC CICS SEND CONTROL CURSOR(1760)
END-EXEC
EXEC CICS SEND FROM(MSG)
LENGTH(40)
END-EXEC
EXEC CICS RETURN END-EXEC.
IF REQUEST = ‘TIME’
EXEC CICS ASKTIME ABSTIME(GETTIME)
END-EXEC
EXEC CICS FORMATTIME ABSTIME(GETTIME)
TIMESEP
TIME(TIMEOUT)
END-EXEC
STRING ‘TIME IS: ‘ TIMEOUT
DELIMITED BY SIZE INTO MSG
EXEC CICS SEND CONTROL CURSOR(80)
END-EXEC
EXEC CICS SEND FROM(MSG)
LENGTH(20)
END-EXEC
EXEC CICS RETURN END-EXEC.
GOBACK.
不妨假设在CICS中将以上程序关联到TRANSID为“TM01”的交易。则用户若要启动相应任务并提出显示时间的请求,可输入以下一段命令:
TM01 TIME
此时,系统将根据输入的“TM01”启动相应交易的一个任务。该任务便调用了以上程序。其后,系统再根据输入的“TIME”执行程序中相应的分支部分,最终显示出系统当前的时间。时间以小时制表示,以下为运行后屏幕上的一种显示情况:
TM01 TIME
TIME IS: 20:05:12
在以上代码中,关于时间信息的获取,主要是通过两条CICS命令实现的。这两条CICS命令是该程序的关键部分,现将其提取如下:
……
EXEC CICS ASKTIME ABSTIME(GETTIME)
END-EXEC
EXEC CICS FORMATTIME ABSTIME(GETTIME)
TIMESEP
TIME(TIMEOUT)
END-EXEC
……
关于第一条CICS命令ASKTIME,主要有以下几点需要注意:
q 该命令含有一个ABSTIME选项,该选项中的内容应为一个15位长度的有符号整型数变量。该命令将得到的时间信息数据存放在这一变量中。
q 该命令可以更新CICS中的时间信息。
q 该命令可以更新EIB中的信息EIBTIME以及EIBDATE。其中EIBTIME反映了时间信息,而EIBDATE则反映了日期信息。关于日期信息,将在下一小节中讲到。
q 当任务启动后,该命令将反映时间戳(time stamp)的信息。
第二条CICS命令FORMATTIME在此处用来表示接受的为时间信息,同时设置时间信息的格式。对应于以上用法,该命令总共需要包含有3个选项。这3个选项分别为ABSTIME、TIMESEP、以及TIME。其各自的功能分别如下:
q ABSTIME:用来指明时间信息数据的来源。在以上程序中,该选项表示时间信息数据来源于变量GETTIME。
q TIMESEP:用来表明接受的为时间信息。这一选项十分重要。若指明的类型错误,系统有可能会接受日期信息,从而得不到预想的结果。
q TIME:用来设置时间信息的格式,同时结合时间数据,一并存入变量TIMEOUT中。此时,该变量中的内容将为所求的结果信息。