Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Transferts de données

TIME

Obtenir l'heure et la date du jour

Place l'heure du système, ou l'heure suivie de la date, dans une zone numérique de 6, 12 ou 14 chiffres.

Syntaxe

     C                     TIME           heure   60
     C                     TIME           hdate  120
     C                     TIME           hdatec 140
Facteur 1 (18-27)
Non utilisé : on le laisse à blanc.
Facteur 2 (33-42)
Non utilisé.
Zone résultat (43-48)
Zone numérique sans décimale.
Longueur (49-51)
6, 12 ou 14. 6 : heure seule HHMMSS. 12 : HHMMSS suivi de la date. 14 : HHMMSS suivi de la date avec le siècle.
Décimales (52)
0.
Effet
Aucun indicateur n'est positionné. La zone reçoit l'heure du système ; avec 12 ou 14 chiffres, la date du jour suit l'heure. Dans les essais (date de travail en jour, mois, année), la valeur 232333051026 se lit 23 h 23 min 33 s le 05/10/26, et 23233305102026 le 05/10/2026.

À quoi ça sert

TIME sert à horodater : heure de début et de fin d'un traitement, date de création d'un enregistrement, durée écoulée. La date et l'heure sont dans une même zone, que l'on découpe ensuite avec MOVE et MOVEL.

Exemple 1 : Heure seule, avec date, avec siècle

     H*  TIME : heure seule (6 chiffres), heure et date (12, 14)
     C                     TIME           H6      60
     C                     TIME           H12    120
     C                     TIME           H14    140
     C           H6        DSPLY
     C           H12       DSPLY
     C           H14       DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 (il change à chaque exécution) :

232333
232333051026
23233305102026

Les trois longueurs côte à côte : H6 contient l'heure, H12 l'heure suivie de la date sur 6 chiffres, H14 l'heure suivie de la date sur 8 chiffres (année sur quatre chiffres). Le résultat change à chaque exécution.

Exemple 2 : Découper la zone de 12 chiffres

     H*  TIME : decouper la zone de 12 chiffres
     C                     TIME           HD     120
     C                     MOVELHD        HEURE   60
     C                     MOVE HD        JOUR    60
     C                     MOVELHEURE     HH      20
     C           HH        IFGE 0
     C           HH        ANDLT24
     C           'Heure ok'DSPLY
     C                     END
     C           HEURE     DSPLY
     C           JOUR      DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 (il change à chaque exécution) :

Heure ok
232344
 51026

MOVEL prend les 6 premiers chiffres (l'heure), MOVE les 6 derniers (la date). Le test sur les deux premiers chiffres confirme une heure entre 0 et 23.

Le piège

Seules les longueurs 6, 12 et 14 sont admises, sans décimale. Une zone de 8 chiffres donne QRG7056 : « La zone Résultat pour TIME ne correspond pas à un entier de 6, 12 ou 14 positions sans décimale ».

Une zone numérique n'a pas de zéro de tête : comme le 00123 du premier exemple de MOVE, qui s'affiche 123, une heure du matin perd son premier chiffre à l'affichage. Pour découper, passez par MOVEL et MOVE.

En RPG ILE full free

En RPG ILE, %TIME() et %DATE() donnent des valeurs typées ; %CHAR avec un format les transforme en texte.

heure = %char(%time() : *iso0);
datejour = %date();
horodatage = %timestamp();