Gestion du format DATE en RPG FREEFORM sur IBMi
Objectif :
Il est fortement conseillé d’utiliser le format DATE dans les fichiers DB2 et tables SQL.
En effet, le format DATE permet d’éviter les erreurs d’invalidité des dates mais surtout il offre de nombreuses possibilités en RPG FREEFORM et en SQL.
Voici les différents cas d’école d’utilisation du format DATE en RPG FREEFORM.
Déclaration :
//——————————————————————————————
// Déclarations Dates
//——————————————————————————————
Dcl-s Date_1 date; // => date_1 = ‘0001-01-01’
Dcl-s Date_2 date; // => Date_2 = ‘0001-01-01’
Dcl-s Date_Debut_Mois date; // => Date_Debut_Mois = ‘0001-01-01’
Dcl-s Date_Fin_Mois date; // => Date_Fin_Mois = ‘0001-01-01’
Dcl-s Format_Date date; // => Format_Date = ‘0001-01-01’
Dcl-s Format_Date_ISO date(*ISO); // => Format_Date_ISO = ‘0001-01-01’
Dcl-s Format_Date_EUR date(*EUR); // => Format_Date_EUR = ‘01.01.0001’
Récupération de la date du jour :
//——————————————————————————————
// Récupérer date du jour : %DATE()
//——————————————————————————————
Format_Date = %Date(); // => Format_Date = ‘yyyy-mm-dd’
Format_Date_ISO = %Date(); // => Format_Date_ISO = ‘yyyy-mm-dd’
Format_Date_EUR = %Date(); // => Format_Date_EUR = ‘dd.mm.yyyy’
Initialisation :
//——————————————————————————————
// Initialiser un format date : %DATE(valeur:format_valeur)
//——————————————————————————————
// — Initialisations
Format_Date = %DATE(‘2025-02-21’); // => Format_Date = ‘2025-02-21’
Format_Date_ISO = %DATE(‘2025-02-21’:*ISO); // => Format_Date_ISO = ‘2025-02-21’
Format_Date_ISO = %DATE(‘22.02.2025’:*EUR); // => Format_Date_ISO = ‘2025-02-22’
Format_Date_EUR = %DATE(‘2025-02-21’:*ISO); // => Format_Date_EUR = ‘21.02.2025’
Format_Date_EUR = %DATE(‘22.02.2025’:*EUR); // => Format_Date_EUR = ‘22.02.2025’
Extraction des données à partir d'une DATE :
//————————————————————————————————————–
// Extraire une partie d’une date : %SUBDT(date : Paramètre_partie_à_récupérer)
//————————————————————————————————————–
// — Initialisations
Format_Date = %DATE(‘2021-01-21’); // => Format_Date = ‘2021-01-21’
Format_Date_ISO = %DATE(‘2022-02-22’); // => Format_Date_ISO = ‘2022-02-22’
Format_Date_EUR = %DATE(‘2023-03-23’); // => Format_Date_EUR = ‘23.03.2023’
// — Extractions
variable_4_0 = %SUBDT(Format_Date :*YEARS); // => variable_4_0 = 2021
variable_2_0 = %SUBDT(Format_Date_ISO:*MONTHS); // => variable_2_0 = 02
variable_2_0 = %SUBDT(Format_Date_EUR:*DAYS); // => variable_2_0 = 23
Ajout/Suppression de périodes à une DATE :
//—————————————————————————————————————–
// Ajout/suppression de jours/mois/années : %YEARS(x) / %MONTHS(x) / %DAYS(x)
//—————————————————————————————————————–
// — Initialisations
Format_Date = %DATE(‘2021-01-21’); // => Format_Date = ‘2021-01-21’
Format_Date_ISO = %DATE(‘2022-02-22’); // => Format_Date_ISO = ‘2022-02-22’
Format_Date_EUR = %DATE(‘2023-03-23’); // => Format_Date_EUR = ‘23.03.2023’
// — Ajout de périodes
Format_Date = Format_Date – %YEARS(1); // => Format_Date = ‘2020-01-01’
Format_Date_ISO = Format_Date_ISO + %MONTHS(1); // => Format_Date_ISO = ‘2022-03-22’
Format_Date_EUR = Format_Date_EUR – %DAYS(1); // => Format_Date_EUR = ‘22.03.2023’
Extraction de la durée entre deux dates :
//———————————————————————————————————————————–
// Différence entre 2 dates : %DIFF(date_1:date_2: Format_différence *DAYS *MONTHS *YEARS)
//———————————————————————————————————————————–
// — Initialisations
Date_1 = %DATE(‘2025-02-15’); // => Date_1 = ‘2025-02-15’
Date_2 = %DATE(‘2024-01-15’); // => Date_2 = ‘2024-01-15’
// — Calcul de la durée entre 2 dates
variable_2_0 = %DIFF(Date_1:Date_2:*YEARS); // => variable_2_0 = 1
variable_2_0 = %DIFF(Date_1:Date_2:*MONTHS); // => variable_2_0 = 13
variable_4_0 = %DIFF(Date_1:Date_2:*DAYS); // => variable_4_0 = 397
// — Initialisations
Date_1 = %DATE(‘2025-01-01’); // => Date_1 = ‘2025-01_01’
Date_2 = %DATE(‘2025-02-01’); // => Date_1 = ‘2025-02-01’
// — Calcul de la durée entre 2 dates
variable_4_0 = %DIFF(Date_2:Date_1:*DAYS); // => variable_4_0 = 31
variable_4_0 = %DIFF(Date_1:Date_2:*DAYS); // => variable_4_0 = -31
Conversion DATE en DATE :
//——————————————————————————————
// Conversion Date vers Date
//——————————————————————————————
// — Initialisations
Format_Date = %DATE(‘2025-03-22’); // => Format_Date = ‘2025-03-22’
// — Conversions
Format_Date_ISO = Format_Date; // => Format_Date_ISO = ‘2025-03-22’
Format_Date_EUR = Format_Date; // => Format_Date_EUR = ‘22.03.2025’
Conversion DATE en ALPHA :
//——————————————————————————————
// Conversion Date vers alpha 10
//——————————————————————————————
// — Initialisations
Format_Date = %DATE(‘2025-03-22’); // => Format_Date = ‘2025-03-22’
Format_Date_ISO = %DATE(‘2025-03-22’); // => Format_Date_ISO = ‘2025-03-22’
Format_Date_EUR = %DATE(‘2025-03-22’); // => Format_Date_EUR = ‘22.03.2025’
// — Conversions
variable_10 = %CHAR(Format_Date_ISO); // => variable_10 = ‘2025-03-22’
variable_10 = %CHAR(Format_Date_EUR); // => variable_10 = ‘22.03.2025’
variable_10 = %CHAR(Format_date_ISO:*ymd); // => variable_10 = ’25/03/22 ‘
variable_10 = %CHAR(Format_date_ISO:*ymd-); // => variable_10 = ’25-03-22 ‘
variable_10 = %char(Format_date_EUR:*ymd/); // => variable_10 = ’25/03/22 ‘
variable_10 = %CHAR(Format_date_ISO:*ymd0); // => variable_10 = ‘250322 ‘
variable_10 = %CHAR(Format_date_ISO:*iso); // => variable_10 = ‘2025-03-22’
variable_10 = %CHAR(Format_date_ISO:*dmy); // => variable_10 = ’22/03/25 ‘
variable_10 = %CHAR(Format_date_ISO:*dmy-); // => variable_10 = ’22-03-25 ‘
variable_10 = %char(Format_date_ISO:*dmy/); // => variable_10 = ’22/03/25 ‘
variable_10 = %CHAR(Format_date_ISO:*dmy0); // => variable_10 = ‘220325 ‘
variable_10 = %CHAR(Format_date_ISO:*iso0); // => variable_10 = ‘20250322 ‘
variable_10 = %CHAR(Format_date_ISO:*eur0); // => variable_10 = ‘22032025 ‘
Conversion DATE en NUMERIQUE 8 dont 0 :
//————————————————————————————————————
// Conversion Date vers numéric 8:0 : %DEC(date:format_de_la_date_en_sortie)
//————————————————————————————————————
// — Initialisations
Format_Date = %DATE(‘2025-03-22’); // => Format_Date = ‘2025-03-22’
Format_Date_ISO = %DATE(‘2025-03-22’); // => Format_Date_ISO = ‘2025-03-22’
Format_Date_EUR = %DATE(‘2025-03-22’); // => Format_Date_EUR = ‘22.03.2025’
// — Conversions
variable_8_0 = %DEC(Format_date_ISO:*ISO); // => variable_8_0 = 20250322
variable_8_0 = %DEC(Format_date_ISO:*EUR); // => variable_8_0 = 22032025
variable_8_0 = %DEC(Format_date_EUR:*ISO); // => variable_8_0 = 20250322
variable_8_0 = %DEC(Format_date_EUR:*EUR); // => variable_8_0 = 22032025
Conversion DATE en NUMERIQUE 6 dont 0 :
//————————————————————————————————————
// Conversion Date vers numéric 6:0 : %DEC(date:format_de_la_date_en_sortie)
//————————————————————————————————————
// — Initialisations
Format_Date = %DATE(‘2025-03-22’); // => Format_Date = ‘2025-03-22’
Format_Date_ISO = %DATE(‘2025-03-22’); // => Format_Date_ISO = ‘2025-03-22’
Format_Date_EUR = %DATE(‘2025-03-22’); // => Format_Date_EUR = ‘22.03.2025’
// — Conversions
variable_6_0 = %DEC(%CHAR(Format_date_ISO:*ymd0):6:0); // => variable_6_0 = 250322
variable_6_0 = %DEC(%CHAR(Format_date_ISO:*dmy0):6:0); // => variable_6_0 = 220325
variable_6_0 = %DEC(%CHAR(Format_date_EUR:*ymd0):6:0); // => variable_6_0 = 250322
variable_6_0 = %DEC(%CHAR(Format_date_EUR:*dmy0):6:0); // => variable_6_0 = 220325
Conversion ALPHA en DATE :
//——————————————————————————————
// Conversion alpha vers date : %DATE(valeur:format_valeur);
//——————————————————————————————
// — Initialisations
variable_10 = ‘2025-02-15’; // => variable_10 = ‘2025-02-15’
// — Conversions
Format_date_ISO = %DATE(variable_10:*ISO); // => Format_Date_ISO = ‘2025-02-15’
Format_date_EUR = %DATE(variable_10:*ISO); // => Format_Date_EUR = ‘15.02.2025’
Conversion NUMERIQUE 8 DONT 0 en DATE :
//——————————————————————————————————
// Conversion numérique 8 vers date : %DATE(date:format_date_en_entree)
//——————————————————————————————————
// — Initialisations
variable_8_0 = 20250201; // => variable_8_0 = 20250201
// — Conversions
Format_date_ISO = %DATE(variable_8_0:*ISO); // => Format_Date_ISO = ‘2025-02-01’
Format_date_EUR = %DATE(variable_8_0:*ISO); // => Format_Date_EUR = ‘01.02.2025’
Conversion NUMERIQUE 6 DONT 0 en DATE :
//——————————————————————————————————-
// Conversion numérique 6 vers date : %DATE(date:format_date_en_entree)
//——————————————————————————————————-
// — Initialisations
variable_6_0 = 250201; // => variable_6_0 = 250201
// — Conversions
Format_date_ISO = %DATE(variable_6_0:*ymd); // => Format_Date_ISO = ‘2025-02-01’
Format_date_EUR = %DATE(variable_6_0:*ymd); // => Format_Date_EUR = ‘01.02.2025’
Conversion date NUMERIQUE 6 en date NUMERIQUE 8 :
//——————————————————————————————————————
// Conversion numérique 8 vers numérique 6 : %DATE(date:format_date_en_entree)
//——————————————————————————————————————
// — Initialisations
variable_8_0 = 20250201; // => variable_8_0 = 20250201
// — Conversions
variable_6_0 = %DEC(%CHAR(%DATE(variable_8_0:*iso):*ymd0):6:0); // => Variable_6_0 = 250201
variable_6_0 = %DEC(%CHAR(%DATE(variable_8_0:*iso):*dmy0):6:0); // => Variable_6_0 = 010225
Calcul du premier jour du mois :
//——————————————————————————————
// Calcul le premier jour du mois
//——————————————————————————————
// — Initialisations
Format_Date_ISO = %DATE(‘2025-03-22’); // => Format_Date_ISO = ‘2025-03-22’
// Calcul 1er jour du mois
Date_Debut_Mois = Format_Date_ISO // => Date_Debut_Mois = ‘2025-03-01’
– %DAYS(%SUBDT(Format_Date_ISO:*days))
+ %DAYS(1);
Calcul du dernier jour du mois :
//——————————————————————————————
// Calcul le dernier jour du mois
//——————————————————————————————
// — Initialisations
Format_Date_ISO = %DATE(‘2025-03-22’); // => Format_Date_ISO = ‘2025-03-22’
// Calcul dernier jour du mois
Date_Fin_Mois = Format_Date_ISO // => Date_Fin_Mois = ‘2025-03-31’
+ %MONTHS(1)
– %DAYS(%SUBDT((Format_Date_ISO + %MONTHS(1)):*days));