1

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

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

在从输出写入记录时,我需要您的帮助来比较时间字段。例如,我有 8 个字节的文件 hlding 时间戳的第 12 位。我想在记录上的时间戳小于或等于当前时间戳一小时时写入输出。在实现这一目标的过程中,我陷入了以下困境:

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

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

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

问候,拉贾。

4

2 回答 2

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 参数进行的调整。

注意:如果您在 PDS 中将上述 REXX 过程存储为:“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 小时数。

于 2010-10-01T17:09:41.730 回答
0

如果您的 DFSORT 是最新的,2010 年 10 月,DATE5 将具有 DATE4 的等价物,但包括微秒,就像 DB2“时间戳”一样。

 OPTION COPY
 INREC OVERLAY=(1:DATE5)

2013-04-08-19.29.41.261377
于 2013-04-08T19:35:57.703 回答