> Tech > %DATE d’ADDDUR

%DATE d’ADDDUR

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

L'une des possibilités les plus acclamées de RPG IV est sa reconnaissance des types de données date et heure natifs. La plupart des applications de gestion traitent des dates. Les opérations ADDDUR (Add Duration), SUBDUR (Substract Duration) et EXTRCT (Extract) effectuent des calculs et des manipulations de dates dans les

%DATE d’ADDDUR

cartes
C, mais elles ne fonctionnent pas avec
des expressions et elles ne sont pas
non plus supportées dans la spécification
en format libre introduite en version
5. Avec la V5R1, ces opérations relativement
nouvelles sont rendues
obsolètes par certaines nouvelles fonctions
intégrées.
La fonction %DATE, %TIME ou
%TIMESTAMP renverra, sous forme native,
une date, une heure, ou un tampon
horodateur facilement utilisable
dans un programme. Chacune de ces
fonctions accepte une expression caractère
ou numérique comme premier
argument (les fonctions %DATE et
%TIME acceptent aussi des données
horodateur et %TIMESTAMP autorise
une date). Le second argument indique
le format date de l’expression.
Par exemple, vous pourriez convertir
un champ numérique en format
MMDDCCYY en une date native avec
l’expression d’attribution suivante :

BirthDate = %DATE(BirthYMD:*USA);

Le résultat sera une date native.
Celle-ci peut être dans n’importe quel
format de date valide, bien que la fonction
%DATE renvoie toujours une date
en format ISO.
Si vous omettez des arguments pour la fonction %DATE, %TIME ou
%TIMESTAMP, vous obtiendrez la date,
l’heure ou le tampon horodateur courant
:

Today = %DATE();

La nouvelle fonction %DIFF calcule
la durée entre deux dates, heures ou
tampons horodateurs. Les deux premiers
arguments indiquent les deux
dates, heures ou tampons horodateurs
; ils doivent être du même type
de données – ou dans le cas d’un tampon
horodateur, on peut comparer
une date ou une heure avec la portion
correspondante du tampon horodateur.
Le troisième argument utilise un
code de durée pour stipuler l’unité
que l’on veut utiliser pour exprimer la
différence ; on peut employer n’importe
lequel des mêmes codes de durée
que l’on a déjà  utilisés pour les
opérations de date. Voici quelques
exemples :

DayOld = %DIFF(Today:BirthDate:*DAYS);

ou

DayOld = %DIFF(%DATE() :
%DATE(BirthYMD:*USA):
*DAYS();

Le résultat de la fonction %DIFF est
une durée numérique, arrondie, sans
reste.
Sept fonctions convertissent une
valeur numérique en une durée pour
être utilisée avec des dates, des heures
ou des tampons horodateurs dans des
expressions en format libre. Leurs
noms sont prévisibles :

  • %YEARS
  • %MONTHS
  • %DAYS
  • %HOURS
  • %MINUTES
  • %SECONDS
  • %MSECONDS
  • On peut inclure l’une quelconque
    de ces fonctions dans le côté droit
    d’une expression d’attribution – avec
    dates, heures ou tampons horodateurs
    – pour effectuer des calculs de dates :

    DueDate = InvDate + %DAYS(30);

    En plus de permettre ces fonctions
    de type date, les expressions d’attribution
    de date (qui définissent la valeur
    d’une date, d’une heure ou d’un tampon
    horodateur) vous permettent
    aussi d’inclure la fonction %DIFF.
    La fonction %SUBDT « souschaîne
    » une date ; autrement dit, elle
    extrait une portion d’une date, d’une
    heure ou d’un tampon horodateur et
    renvoie une valeur numérique non signée.
    Cette fonction est similaire au
    code opération EXTRCT aujourd’hui
    obsolète. %SUBDT prend deux arguments
    : (1) la date, l’heure ou le tampon
    horodateur et (2) un code de durée
    représentant la portion de la date à 
    extraire. Dans l’exemple suivant, nous
    utilisons %SUBDT pour déterminer si
    la date d’une facture correspond au
    mois actuel du job :

    If %SUBDT(InvDate:*M) = UMonth;
    ProcInv(InvNbr);
    Endif;

    Même si vous n’utilisez pas les
    types de données de date natives dans
    votre base de données, vous pouvez
    quand même employer les fonctions
    de RPG IV qui sont liées à  la date ou qui
    effectuent des calculs sur les dates.
    Vous pouvez facilement utiliser les
    fonctions %DATE, %TIME et %TIMESTAMP
    pour convertir vos dates numériques
    ou caractère en types de données
    natives. La fonction %CHAR
    permet de reconvertir une date en un
    champ caractère en spécifiant le format
    comme second argument:

    DateC = %CHAR(Date:*ISO0);

    Le format *ISO0 indique que le
    champ caractère devrait être en format
    ISO (CCYYMMDD) sans caractères de
    séparation ; sans le 0 à  droite, les
    champs caractère nécessiteraient des
    caractères de séparation.
    En V5R2, les fonctions de conversion
    numérique (%DEC, %INT, %UND)
    convertiront non seulement des expressions
    numériques mais aussi des
    valeurs numériques en expressions caractère.
    Ce support simplifie la conversion
    des données natives en champs numériques, en combinant les fonctions
    %CHAR et %INT :

    DateN = %UNS(%CHAR(Date:*ISO0));

    Téléchargez cette ressource

    Guide de Sécurité IA et IoT

    Guide de Sécurité IA et IoT

    Compte tenu de l'ampleur des changements que l'IA est susceptible d'entraîner, les organisations doivent élaborer une stratégie pour se préparer à adopter et à sécuriser l'IA. Découvrez dans ce Livre blanc Kaspersky quatre stratégies efficaces pour sécuriser l'IA et l'IoT.

    Tech - Par Renaud ROSSET - Publié le 24 juin 2010