RPG 4: приведение целого числа со знаком к дате и времени - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужна временная метка (в Signed Int) для даты и времени. Как я могу это сделать?

Идея:

D  stampint                     10I 0     //- value: '1455554435' - input parm 
D  Varprint                     10A      
D  Varprint2                     8A 0     

 /free
   Varprint  = %char(%date( (<cast to timestamp> stampint) :*MDY));
   Varprint2 = %char(%time( (<cast to timestamp> stampint) :*HMS));
   dsply Varprint;
   dsply Varprint;
   inlr = *on;
   return ;
 /End-free

 Objective result:
   DSPLY 02/15/2016
   DSPLY 16:40:35

Спасибо.

ОБНОВЛЕНИЕ: Извините, я поставил вопрос так быстро, что не правильно сообщил об этом.

Цель состоит в том, чтобы иметь возможность сообщать дату и время независимо от типа переменной. Var1 может быть * CHAR или цифрой c (в упаковке). Varprint и Varprint2 являются примером, но я хотел бы знать, как привести тип I к типу Z.

Я пытался использовать:

D timestmp          Z inz('1970-01-01-00.00.00.000000')
D result            Z inz('0001-01-01-00.00.00.000000')
... code..
 /free
   result = timestmp + %seconds(stampint);
   dsply result;
 /end-free

Но результат неправильный.

Я тоже пробовал:

Varprint  = %char(%date( %editc(stampint:'Z') :*MDY));

Но это дает ошибку компиляции: * RNF7416 - Типы правой и левой стороны не выполняют операцию EVAL.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Не могли бы вы привести пример значения для stampint? И для этого значения, что вы хотите, чтобы varprint и varprint2 были?

Обновление. Поскольку stampint - это количество секунд, то, предполагая, что это число секунд с 1 января 1970 года, выполните следующие действия:

   dcl-s ts timestamp;                                 
   dcl-s d date;                                       
   dcl-s t time;                                       
   dcl-s stampint int(10) inz(1000000000);                  

   ts = Z'1970-01-01-00.00.00' + %seconds(stampint);   
   d = %date(ts);                                      
   t = %time(ts);                                      
   dsply (d);                                          
   dsply (t);                                          
   return;                                             

Чтобы получить дату в виде значения символа в форме * MDY:

   varprint = %char(%date(ts) : *mdy);
   varprintt = %char(%time(ts) : *hms);
0 голосов
/ 20 февраля 2020

Вам нужно будет использовать% timestamp (), за исключением того, что целое число 10 di git недостаточно велико для фактической отметки времени ... 6 цифр для даты и 6 цифр для времени (включая секунды)

Лучше всего было бы использовать %editc(sampint:'X') для преобразования в строку символов с ведущими нулями, затем в% subst (), чтобы выделить дату, и я предполагаю, что на время это всего лишь «ЧЧ: МИ». ..

Если вы хотите преобразовать в фактический тип времени, вам нужно указать «: 00» в секундах, чтобы использовать% time ();

...