fr en

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));