В RPG используйте дату в формате *job из файла

Я пытаюсь преобразовать в программе RPG дату из файла (это из команды DSPJRN, поэтому поле si 6 числовое, в формате JOB). Я хочу использовать его как дату в своей программе, но не могу добиться этого правильно.

Я попытался описать поле с типом "D": дата, ключевое слово datfmt(*job) для преобразования значения из файла, но datfmt(*job) неверный (ошибка RNF0612)

Я попытался получить формат даты задания из программы CLP с помощью RTVJOBA DATFMT(& FMT) и использовать переменную в RPG для преобразования даты следующим образом.

eval ztJODATE = %date(JODATE:FMT)

но не компилируется: ошибка RNF0606. Я думаю, что я не могу использовать переменную для формата во встроенной функции %date.

Это способ сделать то, что я хочу, или я вынужден преобразовать значение даты в SQL, прежде чем использовать его значение в RPG? PS: я не хочу жестко кодировать формат в своей RPG-программе!


person FredericP    schedule 23.04.2020    source источник


Ответы (2)


Вы можете указать *JOBRUN для %DATE.

eval      ztJODATE = %date(JODATE:*JOBRUN)

Обратите внимание, что RPG извлекает формат даты задания во время инициализации модуля, поэтому, если вы измените формат даты задания во время работы программы, RPG не распознает дату.

person Barbara Morris    schedule 24.04.2020
comment
Ага! Это было то, что я искал ... Я, должно быть, видел вариант и безуспешно пробовал, поэтому я подумал, что это не очень хороший формат ... Но это было просто то, что DSPJRN создал поле char для даты. .. Если делаю ztJODATE = %date(JODATE:*JOBRUN) выдает ошибку, а если делаю ztJODATE = %date(%int(JODATE):*JOBRUN) то работает! - person FredericP; 24.04.2020
comment
Какую ошибку выдает, если просто выполнить %date(JODATE:*JOBRUN)? Это ошибка времени компиляции или ошибка времени выполнения? Каков тип данных JODATE? - person Barbara Morris; 27.04.2020

Вместо использования DSPJRN для внешнего файла рекомендуемый способ извлечения и обработки записей журнала — использование одного из программных интерфейсов, предоставляемых IBM i.

Вы также можете использовать формат *TYPE3 или выше для выходного файла. Вместо отдельных полей данных и времени, отформатированных для задания, существует одно поле системной метки времени char(26).

При этом существует API преобразования формата даты и времени (QWCCVTDT)., который принимает '*JOB' в качестве спецификатора формата ввода.

person Charles    schedule 23.04.2020
comment
Спасибо, я пока использую QWCCVDT (что немного странно: нужно добавить столетие к значению в формате ввода без века и дает результат, который не является датой, не отметкой времени, но должен быть изменен для преобразования в метку времени). Я проверил другую информацию, которую вы предоставили, поэтому в следующий раз, когда я захочу использовать информацию журнала (или если я внесу много изменений в эти программы), я подумаю об использовании хранимой процедуры... - person FredericP; 24.04.2020