我们可以比较JCL的SORT卡中的时间字段吗?

时间:2010-09-29 10:42:53

标签: mainframe dfsort

假设我有一个8字节的记录保持时间字段的12个位置。我可以将它与当前时间戳进行比较吗?我可以对该字段进行算术运算,例如添加一小时或减去几分钟等。您的回复将受到高度赞赏。谢谢!

附录..为了更好地理解:

在从输出中写入记录时,我需要你的帮助来比较时间字段。 例如,我有文件hloding时间戳为8字节的第12个位置。当记录上的时间戳小于或等于当前时间戳一小时时,我想写入输出。在达到这个目标的过程中,我被困在了下面:

INCLUDE COND=(12,8,??,GE,&TIME1-1),

可能是什么数据表示(代替??。)

在此之前我们可以使用SORT实现这一目标吗?如果是这样,请给我一张SORT卡(如果可行,请修改我的卡,否则请给你的版本)。此外,请分享材料/回购时间和日期比较和更好的处理。在此先感谢您的帮助。

此致 拉加。

2 个答案:

答案 0 :(得分:1)

我认为看看你想做什么,但怀疑它是否会起作用。这些是我的想法:

  • 我只见过用于输出的& TIME1(c)字符串。例如: OUTREC BUILD(1,11,12,& TIME1(:)) 将当前时间以HH:MM:SS格式放入从位置12开始的输出记录中 据我所知, TIME 不能在您的问题中指出的ICETOOL / DFSORT COND 声明中使用。
  • 即使 COND 语句中支持 TIME ,也不支持+/-运算符 已经看到 DATE (例如 DATE1 + 1 获取当前日期加1天)。将一些常量添加到 TIME 不受支持。
  • 您是否考虑过如果您的工作运行几分钟会发生什么 午夜前?增加一小时的时间会导致翻到第二天的早晨。那时候你 需要在COND中将日期纳入考虑范围。

可能有用的东西:添加一个预步骤来运行REXX或其他一些prgram。让这个节目 生成全部或部分 后续ICETOOL步骤中使用的 INCLUDE 语句。这是一个示例REXX过程 将创建一个类似于您的问题中给出的 INCLUDE 语句。记录是 写入分配给DD CNTLREC的文件:

 /* REXX */
 PULL DELTA  /* Number of hours to add to current time */
 PARSE VALUE TIME('N') WITH HH ':' MM ':' SS /* current time */
 HH = LEFT((HH + DELTA) // 24, 2, '0')  /* add DELTA, check rollover */
 QUEUE " INCLUDE COND=(12,8,CH,GE,C'"HH":"MM":"SS"'),"
 EXECIO * DISKR CNTLREC(FINIS
 EXIT

将此文件分配给相应的ICETOOL控制语句DD,它应该适合您。

警告:此示例不处理可能的调整 在午夜翻滚的情况下需要COND参数。

注意:如果您将上述REXX程序存储在PDS中:“MY.REXX(FOO)”,您的预备步骤 JCL看起来像:

//RUNREXX   EXEC PGM=IKJEFT01           
//SYSEXEC  DD DSN=MY.REXX,DISP=SHR  
//SYSTSPRT DD SYSOUT=A                  
//SYSTSIN  DD *                         
%FOO
1                               
/*                                      
//

%FOO之后的'1'是程序中引用的DELTA小时数。

答案 1 :(得分:0)

如果您的DFSORT是最新的,2010年10月,DATE5将具有相当于DATE4但包括微秒,所以就像DB2“时间戳”。

 OPTION COPY
 INREC OVERLAY=(1:DATE5)

给出

2013-04-08-19.29.41.261377