Mon compte | Téléassistance | Français Anglais 
   
PHL Soft

Editeur de solutions de modernisation
et de développement web sur AS/400 (IBM i)

   
Accueil Produits Références Société Newsletters Mon compte Contact
Rubrique PHL Mag

Programmation RPG IV: dates, heures, horodatage

Le RPG IV offre de nombreuses possibilités d'utilisation des dates, des heures et de l'horodatage. Il propose divers formats, plusieurs manières de les initialiser, ainsi que diverses opérations et fonctions pour les manipuler.

Les dates

Il existe plusieurs manières de définir des dates en RPG :

  • Date du travail sur 8 chiffres : *DATE
  • Date du travail sur 6 chiffres : UDATE
  • Date système : en utilisant le code opération TIME

Il est possible de définir des zones de type Date (D) dans les spécifications D :

Ex :

Dzone_date S D

Le mot clé INZ permet de les initialiser :

  • *SYS : date système (valeur par défaut)
  • *JOB : date du travail
  • D’date’ : date quelconque

Ex :

Dzone_date S D INZ(D'12/12/10')
Dzone_du_job S D INZ(*JOB)

Le format des dates

Le format de *DATE et UDATE dépend du mot clé DATEDIT(fmt{séparateur}) en carte H. Les valeurs possibles de fmt sont :
*DMY
*MDY
*YMD

Les valeur possibles du séparateur sont :
/ (par défaut)
& (espace)

Le format des zones dates est défini dans le mot clé DATFMT(fmt{séparateur}). Il peut être mis soit en carte H ou dans la carte D. Par défaut le format *ISO est utilisé.

Opérations sur les dates

ADDDUR : ajoute une durée à une date
EXTRCT : extrait un élément d’une date
MOVE, MOVEL : opération de conversion de date
SUBDUR : enlève une durée d'une date
TEST(D): teste la validité d\’une date
TIME : charge une zone date avec la date système

Fonctions intégrées

%DATE(expression :{format}) : convertit l’expression en une date
%DAYS(nombre) : convertit le nombre en une durée exprimée en jours
%MONTH(nombre) : convertit le nombre en une durée exprimée en mois
%YEARS(nombre) : convertit le nombre en une durée exprimée en années
%DIFF(op1 :op2 :unité) : calcule la durée entre deux dates dans l’unité spécifiée
%SUBDT(valeur :élément) : extrait l’élément demandé d’une date

Les valeurs possibles de fmt et du séparateur
Les valeurs possibles de fmt et du séparateur

Les heures

Le RPG IV permet de définir des zones de type heure (T)

Ex :

Dzone_heure S T

Par défaut, ces zones sont initialisée par les valeurs systèmes. Toutefois le mot clé INZ permet de les initialiser avec une valeur particulière.

Ex :

Dzone_heure S T INZ(T'10:45:10')

Le format des heures

Le format des zones heures est défini avec le mot clé TIMFMT(fmt{séparateur}).
Par défaut le format *ISO est utilisé. Il peut être mis soit en carte H soit dans la carte D.

Opérations sur les heures

Codes opérations

ADDDUR : ajoute une durée à une heure
EXTRCT : extrait un élément d’une heure
MOVE, MOVEL : opération de conversion d'heure
SUBDUR : enlève une durée d'une heure
TEST(T) : teste la validité d’une heure
TIME : charge une zone heure avec l'heure système

Fonctions intégrées

%TIME(expression :{format}) : convertit l’expression en une heure
%HOURS(nombre) : convertit le nombre en une durée exprimée en heures
%MINUTES(nombre) : convertit le nombre en une durée exprimée en minutes
%SECONDES(nombre) : convertit le nombre en une durée exprimée en secondes
%MSECONDES(nombre) : convertit le nombre en une durée exprimée en microsecondes
%DIFF(op1 :op2 :unité) : calcule la durée entre deux heures dans l’unité spécifiée
%SUBDT(valeur :élément) : extrait l’élément demandé d’une heure

Les valeurs possibles de fmt et du séparateur
Les valeurs possibles de fmt et du séparateur

Les zones d’horodatages

Le RPG IV permet de définir des zones d'horodatage (Z)

Ex :

DHorodatage S Z

Par défaut, ces zones sont initialisée avec les valeurs systèmes. Toutefois le mot clé INZ permet de les initialiser avec une valeur particulière.

Ex :

DHorodatage S INZ(Z’2010121211D .45.30.000000’)

Le format des zones d’horodatage est le format *ISO : yyyymmddhh.mm.ss.mmmmmm. La longueur de ce type de zone est de 26. La valeur pour *LOVAL est : 0001010100.00.00.000000. La valeur pour *HIVAL est : 9999123124.00.00.000000.

Opération sur les horodatages

Codes opérations

ADDDUR : ajoute une durée à un horodatage
EXTRCT : extrait un élément d’un horodatage
SUBDUR : enlève une durée d'un horodatage
MOVE, MOVEL : opération de conversion d’horodatage
TEST(Z) : teste la validité d’un horodatage
TIME : charge une zone d'horodatage avec la date et l'heure système

Fonctions intégrées

%TIMESTAMP(expression) : convertit l’expression en une valeur d'horodatage
%DAYS(nombre) : convertit le nombre en une durée exprimée en jours
%MONTH(nombre) : convertit le nombre en une durée exprimée en mois
%YEARS(nombre) : convertit le nombre en une durée exprimée en année
%HOURS(nombre) : convertit le nombre en une durée exprimée en heures
%MINUTES(nombre) : convertit le nombre en une durée exprimée en minutes
%SECONDES(nombre) : convertit le nombre en une durée exprimée en secondes
%MSECONDES(nombre) : convertit le nombre en une durée exprimée en microsecondes
%DIFF(op1 :op2 :unité) : calcule la durée entre deux dates dans l’unité spécifiée
%SUBDT(valeur :élément) : extrait l’élément demandé d’un horodatage

Exemples :

Ddate_debut S D
Ddate_fin S D
Dheure S T
DNb_jour S 5 U 0
DZone_Num S 6 0
DZone_Alpha6 S 6 INZ('020510')
DZone_Alpha10 S 10 INZ('31.07.2009')
DJour S 2 0
Dminutes S 3 U 0


 ** Initialisation d'une date avec la date système
C eval date_debut=%date
 * ou
C time date_debut

 /free
  // Initialisation d'une date avec la date du travail
  date_fin=%date(*DATE);
 /endfree


 ** Conversion d'une date alpha en zone date
C *EUR move date_alpha10 date_debut
 * ou
C eval
 date_debut=%date(date_alpha10:*EUR)
 ** la date alpha n'a pas de séparateur
C *MDY0 move date_alpha6 date_fin
 /free
  date_debut=%date(date_alpha10:*EUR);
  date_finc=%date(date_alpha6:*DMY0);
 /endfree


 ** Conversion d'une zone date en alpha au format *DMY sans séparateur
C *DMY0 move date_fin date_alpha6
 * ou
C eval date_alpha6=%char(date_fin:*DMY0)
 /free
  // Conversion de la date système en zone numérique
  zone_num=%%dec(%char(%date:*YMD0):6:0);
 /endfree


 ** Différence en jours entre 2 dates
C date_fin subdur date_debut:*D nb_jour
 * ou
C eval nb_jour=%diff(date_fin:date_debut:*D)
  ou
C eval nb_jour=%days(date_fin-date_debut)
 /free
  // Si différence en mois entre 2 dates > 1
  if %diff(date_fin:date_debut:*M)>1;

  endif;
 /endfree
 ** Ajout de 30 minutes à une heure
C adddur 30:*mn heure
 /free
  heure+=%minutes(30);
 /endfree


 ** Test de la validité d'une date contenue dans une zone numérique
C *YMD TEST(D) Zone_Num 80
C if *in80
 ** Erreur date
C endif
 // Exemple RPG Free
 /free
  test(ed) *YMD Zone_num;
  if %error;
  endif;
 /endfree


 ** Test de validité d’heure
C TEST(E) heure
C if %error heure
 Erreur heure
C endif


 ** Extraction du jour d'une date
C EXTRCT Date_debut:*d jour
 * ou
C eval jour=%subdt(date_debut:*d)
 /free
  // extraction des minutes d'une heure
  minutes=%subdt(heure:*MN);
 /endfree



 Logo PHL SOFT © 2011 - PHL SOFT
PHL SOFT Partenaire IBM Niveau Advanced
Plan du site - Informations légales - Contact
Logo Partenaire IBM Niveau Advanced