%MINUTES
Durée en minutes
Représente un nombre de minutes, à ajouter à une heure ou à un horodatage, ou à en retrancher.
Syntaxe
heure + %MINUTES(nombre)
horodatage - %MINUTES(nombre)
nombre- Le nombre de minutes : une constante, une zone numérique ou une expression. Un nombre négatif fait reculer.
- Résultat
- Une durée, à combiner avec une heure ou un horodatage par
+ou-. Les minutes en trop se reportent sur les heures (90 minutes = 1 h 30). Le compilateur refuse la durée avec une date (RNF7584).
À quoi ça sert
Planifier des créneaux de rendez-vous, calculer un délai de rappel, fixer une durée de blocage : les durées courtes se manipulent naturellement en minutes. %MINUTES gère les reports sur les heures et, avec un horodatage, sur les jours.
Exemple 1 : Créneaux de consultation
**free
// %MINUTES : ajouter ou retirer des minutes (creneaux, delais courts).
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-s rdv time inz(t'09.00.00');
dcl-s creneau time;
dcl-s duree int(10) inz(45);
dcl-s stamp timestamp inz(z'2026-09-30-23.50.00.000000');
dcl-s i int(10);
// Trois consultations de 45 minutes a la suite.
creneau = rdv;
for i = 1 to 3;
snd-msg 'Consultation ' + %char(i) + ' : ' + %char(creneau : *hms) + ' -> ' +
%char(creneau + %minutes(duree) : *hms);
creneau = creneau + %minutes(duree);
endfor;
// Un delai de 90 minutes se convertit tout seul en heures et minutes.
snd-msg '09:00 + 90 min : [' + %char(rdv + %minutes(90) : *hms) + ']';
// Sur un horodatage, le passage minuit change la date.
snd-msg 'Stamp + 20 min : [' + %char(stamp + %minutes(20)) + ']';
snd-msg 'Stamp - 1440 min : [' + %char(stamp - %minutes(1440)) + ']';
*inlr = *on;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
Consultation 1 : 09:00:00 -> 09:45:00
Consultation 2 : 09:45:00 -> 10:30:00
Consultation 3 : 10:30:00 -> 11:15:00
09:00 + 90 min : [10:30:00]
Stamp + 20 min : [2026-10-01-00.10.00.000000]
Stamp - 1440 min : [2026-09-29-23.50.00.000000]
Trois consultations de 45 minutes enchaînées à partir de 9 h : le début de chacune est la fin de la précédente. 90 minutes se reportent en 1 h 30. Sur un horodatage, 20 minutes après 23:50 nous emmènent au lendemain à 00:10 ; retrancher 1440 minutes recule d'un jour.
Exemple 2 : *M ou *MN ?
**free
// Attention aux unites : *M = mois, *MN = minutes (dans %SUBDT et %DIFF).
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-s debut timestamp inz(z'2026-07-15-10.00.00.000000');
dcl-s fin timestamp inz(z'2026-09-30-14.05.00.000000');
snd-msg 'Champ mois du stamp : ' + %char(%subdt(fin : *months));
snd-msg 'Champ minutes : ' + %char(%subdt(fin : *minutes));
// Abreviations : *M vaut mois, *MN vaut minutes.
snd-msg '%SUBDT(fin : *m) : ' + %char(%subdt(fin : *m));
snd-msg '%SUBDT(fin : *mn) : ' + %char(%subdt(fin : *mn));
snd-msg '%DIFF(... : *m) : ' + %char(%diff(fin : debut : *m));
snd-msg '%DIFF(... : *mn) : ' + %char(%diff(fin : debut : *mn));
// %MINUTES est bien la duree en minutes.
snd-msg 'debut + %MINUTES(125) : ' + %char(debut + %minutes(125));
*inlr = *on;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
Champ mois du stamp : 9
Champ minutes : 5
%SUBDT(fin : *m) : 9
%SUBDT(fin : *mn) : 5
%DIFF(... : *m) : 2
%DIFF(... : *mn) : 111125
debut + %MINUTES(125) : 2026-07-15-12.05.00.000000
Le piège d'abréviation. Dans %SUBDT et %DIFF, *M désigne les mois (9 puis 2) et *MN les minutes (5 puis 111125). Écrire les noms complets *MONTHS et *MINUTES évite toute confusion.
Le piège
*M et *MN ne désignent pas la même unité. Dans %DIFF et %SUBDT, *M est le mois et *MN la minute. Une abréviation mal choisie compile sans problème et donne un résultat plausible mais faux (2 au lieu de 111 125). Préférer *MINUTES et *MONTHS.
Comme %HOURS, la fonction reboucle sur 24 heures avec une zone de type heure ; avec une date elle ne compile pas (RNF7584).