Dans cette section : |
Lors de l'utilisation de Fonctions Date et Heure standards, vous devez comprendre comment fonctionnent les paramètres qui modifient le comportement de ces fonctions. De plus, vous devez savoir quels sont les formats de date et d'heure acceptables et comment fournir des valeurs à ceux-ci.
Vous pouvez influencer le comportement des fonctions de date de l'une des manières suivantes :
Pour plus d'informations sur chaque fonction de date standard, consultez :
DATEADD : Ajouter ou supprimer une unité de date dans une date
DATECVT : Convertir le format d'une date
DATEDIF : Rechercher la différence entre deux dates
DATEMOV : Déplacer une date à un point significatif
DATETRAN : Formater des dates dans les formats internationaux
DPART : Extraire un composant à partir d'une date
FIYR : Déterminer l'exercice financier
FIQTR : Obternir le trimestre financier
FIYYQ : Convertir une date de calendrier en une date financière
TODAY : Retourner une date actuelle
Dans cette section : |
Vous pouvez déterminer quels jours sont des jours de travail et lesquels ne le sont pas. Les jours de travail affectent les fonctions DATEADD, DATEDIF, et DATEMOV. Identifiez les jours de travail jours comme jours jours ouvrables ou jours fériés.
Les jours ouvrables sont généralement le Lundi au Vendredi mais tous les jours ouvrables ne suivent pas cet emploi du temps. Par exemple, si votre entreprise mène ses activités le Dimanche, Mardi, Mercredi, Vendredi et Samedi, vous pouvez ajuster les unités de jours ouvrables pour refléter cet emploi du temps.
SET BUSDAYS = smtwtfs
où :
est la liste à sept caractères de jours qui représentent votre semaine de travail. La liste contient un emplacement pour chaque jour du Dimanche au Samedi.
Si une lettre ne se trouve pas à sa position correcte, ou si vous remplacez une lettre avec un caractère autre q'un trait soulignement, vous recevez un message d'erreur.
Ce qui suit désigne les jours de travail comme étant le Dimanche, Mardi, Mercredi, Vendredi et Samedi.
SET BUSDAYS = S_TW_FS
Vous pouvez spécifier une liste de dates désignées comme jours fériés dans votre entreprise. Ces dates sont exclues lorsque vous utilisez les fonctions qui effectuent des calculs en fonction des jours de travail. Par exemple, si le Jeudi dans une semaine donnée est désigné comme jour férié, le jour de travail suivant après Mercredi est Vendredi.
Pour définir une liste de jours fériés, vous devez :
Si vous soustrayez deux dates en 2005, et que la dernière date du fichier de jours fériés est 20041231, la soustraction ne sera pas réalisée. Une façon d'éviter l'invalidation du fichier de jours fériés est d'entrer une date éloignée dans le futur dans n'importe quel fichier de jours fériés que vous créez (par exemple, 29991231) qui sera donc toujours considérée comme étant valide.
Par défaut, le fichier de jours fériés a un nom de fichier du formulaire HDAYxxxx.err et se trouve sur votre chemin, ou sur z/OS sous le déploiement PDS, est un nom de membre nommé HDAYxxxx d'un PDS affecté DDNAME ERRORS. Dans votre procédure ou requête, vous devez lancer la commande SET HDAY=xxxx pour identifier le nom de membre ou de fichier. Alternativement, vous pouvez définir le fichier pour qu'il ait n'importe quel nom et qu'il soit stocké n'importe où, ou sur z/OS sous le déploiement PDS, allouer le fichier de jours fériés comme fichier séquentiel de tout nom ou comme membre HDAYxxxx de tout PDS. Pour plus d'informations sur l'utilisation de noms n'étant pas par défaut du fichier de jours fériés, consultez FILEDEF ou DYNAM le fichier Jours fériés.
Si vous n'utilisez pas la convention de nommage par défaut, consultez FILEDEF ou DYNAM le fichier Jours fériés. Si vous utilisez la convention de nommage par défaut, utilisez les instructions suivantes :
Sous Windows et UNIX : le fichier doit être HDAYxxxx.ERR
Sous z/OS : le fichier doit être un membre de ERRORS nommé HDAYxxxx.
où :
est une chaîne de texte d'une longueur de quatre caractères.
SET HDAY = xxxx
où :
fait partie du nom de fichier de jours fériers après HDAY. Cette chaîne doit avoir une longueur de quatre caractères.
Ce qui suit est le fichier HDAYTEST, qui établie les jours fériés :
19910325 TEST HOLIDAY 19911225 CHRISTMAS
Ce qui suit définit HDAYTEST comme le fichier de jours fériés :
SET BUSDAYS = SMTWTFS SET HDAY = TEST
Cette requête utilise HDAYTEST dans ses calculs :
TABLE FILE MOVIES PRINT TITLE RELDATE COMPUTE NEXTDATE/YMD = DATEADD(RELDATE, 'BD', 1); WHERE RELDATE GE '19910101'; END
La sortie est :
TITLE RELDATE NEXTDATE ----- ------- -------- TOTAL RECALL 91/03/24 91/03/26
Dans tous les environnements sauf z/OS sous le déploiement PDS, sous la syntaxe suivante.
FILEDEF HDAYxxxx DISK {app/|path}/filename.ext
où :
est le nom logique (DDNAME) pour le fichier Jours fériés, où xxxx est n'importe quels quatre caractères. Etablissez un nom logique en utilisant la commande SET HDAY=xxxx dans votre procédure ou requête.
est le nom du segment où réside le champ.
est le chemin pour le fichier jour férié.
est le nom du fichier d'image.
Sur z/OS sous le déploiement PDS, utilisez ce qui suit pour allouer un fichier de jours fériés séquentiel.
DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix SHR REU
Sur z/OS sous le déploiement PDS, utilisez ce qui suit pour allouer un fichier de jours fériés membre d'un PDS.
DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix(HDAYxxx) SHR REU
où :
est le DDNAME pour le fichier jour férié Votre FOCEXEC ou requête doit définir le paramètre HDAY à xxxx, où xxxx sont n'importes quels quatre caractères de votre choix. Si votre fichier de jours fériés est membre d'un PDS, HDAYxxxx doit également être le nom du membre.
est le nom pleinement qualifié du fichier séquentiel qui contient la liste de jours fériés ou le PDS avec le membre HDAYxxxx qui contient la liste de jours fériés.
Le fichier de jours fériés suivant, nommé holiday.data dans le répertoire c:\temp sous Windows, définit le 3 Novembre 3, 2011 et 24 Décembre 24, 2011 comme jours fériés :
20111103 20111224
La requête suivante contre la source de données MOVIES utilise la commande FILEDEF pour définir ce fichier comme fichier de jours fériés. Le nom logique dans la commande FILEDEF est HDAYMMMM, et la procédure lance la commande SET HDAY=MMMM. Il définit ensuite la date du 2 Novembre 2011 et calcule le prochain jour ouvrable :
FILEDEF HDAYMMMM DISK c:\ibi\holiday.data SET HDAY = MMMM SET BUSDAYS = _MTWTF_ DEFINE FILE MOVIES NEWDATE/YYMD = '20111102'; NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1); END TABLE FILE MOVIES SUM COPIES NEWDATE NEXTDATE ON TABLE SET PAGE NOPAGE END
La sortie montre que le prochain jour ouvrable après le 2 Novembre est le 4 Novembre puisque le 3 Novembre est un jour férié.
Le fichier séquentiel suivant, nommé USER.HOLIDAY.DATA définit le 3 Novembre 2011 et le 24 Décembre 2011 comme jours fériés :
20111103 20111224
La requête suivante contre la source de données MOVIES utilise la commande DYNAM pour affecter ce fichier comme fichier de jours fériés. Le DDNAME dans la commande DYNAM est HDAYMMMM, et la procédure lance la commande SET HDAY=MMMM. Il définit ensuite la date du 2 Novembre 2011 et calcule le prochain jour ouvrable :
DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA SHR REU SET HDAY = MMMM SET BUSDAYS = _MTWTF_ DEFINE FILE MOVIES NEWDATE/YYMD = '20111102'; NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1); END TABLE FILE MOVIES SUM COPIES NEWDATE NEXTDATE ON TABLE SET PAGE NOPAGE END
La sortie montre que le prochain jour ouvrable après le 2 Novembre est le 4 Novembre puisque le 3 Novembre est un jour férié.
COPIES NEWDATE NEXTDATE ------ ------- -------- 117 2011/11/02 2011/11/04
Le fichier de jours fériés suivant, membre HDAYMMMM dans un PDS nommé USER1.HOLIDAY.DATA définit le 3 Novembre 2011 et le 24 Décembre 2011 comme jours fériés :
20111103 20111224
La requête suivante contre la source de données MOVIES utilise la commande DYNAM pour affecter ce fichier comme fichier de jours fériés. Le DDNAME dans la commande DYNAM est HDAYMMMM, le nom du membre est également HDAYMMMM, et la procédure lance la commande SET HDAY=MMMM. Il définit ensuite la date du 2 Novembre 2011 et calcule le prochain jour ouvrable :
DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA(HDAYMMMM) SHR REU SET HDAY = MMMM SET BUSDAYS = _MTWTF_ DEFINE FILE MOVIES NEWDATE/YYMD = '20111102'; NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1); END TABLE FILE MOVIES SUM COPIES NEWDATE NEXTDATE ON TABLE SET PAGE NOPAGE END
La sortie montre que le prochain jour ouvrable après le 2 Novembre est le 4 Novembre puisque le 3 Novembre est un jour férié.
COPIES NEWDATE NEXTDATE ------ ------- -------- 117 2011/11/02 2011/11/04
Comment : |
Si vous utilisez une fonction de date et heure dans le Gestionnaire de dialogue qui renvoie un format entier numérique, le Gestionnaire de dialogue tronque tous zéros à gauche. Par exemple, si une fonction renvoie la valeur 000101 (qui indique le 1er Janvier 2000), le Gestionnaire de dialogue tronque les zéros à gauche, ce qui produit 101, une date incorrecte. Pour éviter ce problème, utilisez le paramètre LEADZERO.
LEADZERO ne prend en charge qu'une expression réalisant un appel direct à une fonction. Une fonction contenant une autre fonction mathématique ou imbriquée tronque toujours les zéros à gauche. Par exemple,
-SET &OUT = AYM(&IN, 1, 'I4')/100;
tronque les zéros à gauche quel que soit le paramètre LEADZERO.
SET LEADZERO = {ON|OFF}
où :
Affiche les zéros à gauche si présents.
Tronque les zéros à gauche. OFF est la valeur par défaut.
La fonction AYM ajoute un mois à la date d'entrée de Décembre 1999 :
-SET &IN = '9912'; -RUN -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
Avec le paramètre LEADZERO par défaut, ça donne :
1
Ceci représente la date du Janvier 2000 incorrectement. Définir le paramètre LEADZERO dans la requête comme ce qui suit :
SET LEADZERO = ON -SET &IN = '9912'; -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
résulte en :
0001
Ceci indique Janvier 2000 correctement.
WebFOCUS |