IBM ILE RPG - 如何存储大于24小时的时间值

时间:2016-09-14 05:45:04

标签: rpgle

如何将时间值(例如:33h 24m 02s)存储在TIME变量中,因为*HIVAL - 最大值 - 是24h 00m 00s。

当有时(当值小于10时)将其存储在数据结构(DS)中时,例如:33:24:03,该值显示为33.24.3,因为该字段没有自动填充零

1 个答案:

答案 0 :(得分:4)

你已经回答了自己的问题,限制是24小时。

我不确定您要完成的是什么,但我建议您使用%diff()内置函数(BIF)来获取两个时间/日期/时间戳值之间的差异将它存储在整数中。然后操纵另一个时间/时间戳字段,您可以使用%seconds() BIF。

例如:

       ctl-opt dftactgrp(*no) actgrp(*new);
       ctl-opt timfmt(*iso);

       dcl-s time1 time inz(t'09.25.00');
       dcl-s time2 time inz(t'10.00.00');
       dcl-s time3 time;
       dcl-s SecondsDiff int(10);
       dcl-s result char(1);

       SecondsDiff = %diff(time2: time1: *seconds);

       time3 = %time() + %seconds(SecondsDiff);

       dsply ('In 35 minutes it will be: ' + %char(time3)) '*EXT' result;

       *inlr = *on; 

这是一个非常简单的例子,如果你能给我更多关于你想要完成的事情的信息,我可以给出一个更具体的例子。

修改

以下是一个示例程序,可以执行您要求的操作:

       ctl-opt dftactgrp(*no) actgrp(*new);

       dcl-s SecondsChar char(20);
       dcl-s Result varchar(32);
       dcl-s WaitAnyKey char(1);

       dsply 'Enter an amount of seconds: ' '*EXT' SecondsChar;

       Result = SecondsToDisplay(%int(SecondsChar));

       dsply Result '*EXT' WaitAnyKey;
       *inlr = *on;

       dcl-proc SecondsToDisplay;
         dcl-pi *n varchar(32);
           Seconds int(10) value;
         end-pi;

         dcl-s Result varchar(32) inz('');
         dcl-s CurrentValue int(10);

       Seconds = %abs(Seconds);

       //Get the days
       CurrentValue = Seconds / 86400;
       if (CurrentValue > 0);
         Result = %char(CurrentValue) + 'd ';
         Seconds = %rem(Seconds: 86400);
       endif;

       //Get the hours
       CurrentValue = Seconds / 3600;
       if (CurrentValue > 0 OR Result <> '');
         Result += %char(CurrentValue) + 'h ';
         Seconds = %rem(Seconds: 3600);
       endif;

       //Get the minutes
       CurrentValue = Seconds / 60;
       if (CurrentValue > 0 OR Result <> '');
         Result += %char(CurrentValue) + 'm ';
         Seconds = %rem(Seconds: 60);
       endif;

       //The seconds
       Result += %char(Seconds) + 's';


       return Result;

       end-proc; 

一些示例输出:

  

DSPLY输入秒数:799240
  DSPLY 9d 6h 0m 40s