2011-11-07 5 views
1

Dans mon projet, j'ai un calcul comme celui-ci Date de début du prêt: Devrait être Date de début + 5 jours ouvrables. J'ai été en mesure d'obtenir la date actuelle, mais je ne sais pas comment faire cette partie des jours ouvrables. Quelqu'un peut-il m'aider.Fonction de date en COBOL

+0

Montrez-nous ce que vous avez. –

Répondre

0

Vérifiez la documentation de votre compilateur. Vous devriez avoir un format de données qui est le nombre de jours depuis le premier de l'année, ou le nombre de jours depuis une date arbitraire (1er janvier 1900 et 1er janvier 1600 sont des choix populaires).

Il devrait y avoir un moyen, en utilisant les bibliothèques de soutien à l'exécution de vos compilateurs pour convertir le résultat de "Function Current-Date" dans un de ces formulaires. Ensuite, l'addition et la soustraction de jours est facile (ou plus facile). Une fois que vous avez ajouté les jours, convertissez le résultat selon le format dont vous avez besoin.

Vous pouvez également écrire vos propres routines de gestion de la date. Vous avez juste besoin de mettre en œuvre un «carry» pour les mois et les années dans le même mois que vous traversez une limite de mois ou d'année.

0

Consultez cet exemple de code pour savoir comment écrire votre propre routine de gestion des dates.

http://www.cobug.com/cobug/docs/futureDateCalc.html

Il suppose que vous êtes en mesure de comprendre quel jour de la semaine, vous êtes maintenant. (Utilisez la fonction INTEGER OF DATE, divisez ce que vous obtenez par 7 et le reste est le jour de la semaine - 1 pour lundi à 7 pour dimanche.)

Si la date de début est toujours égale au jour où vous exécutez le code, vous pouvez également faire ACCEPT (une variable PIC 9) À PARTIR DE JOUR-DE-SEMAINE et vous obtiendrez 1 pour lundi à 7 pour dimanche. Cela ne fonctionne que pour la date actuelle.

0

Bien que facile à énoncer, votre problème est en réalité assez complexe à implémenter.

Généralement les compilateurs COBOL supportent un certain nombre de fonctions intrinsèques que vous pouvez utiliser pour effectuer une simple arithmétique de date. INTEGER-OF-DATE et DATE-OF-INTEGER sont deux exemples. INTEGER-OF-DATE prend une date au format 'YYYYMMDD' et le convertit en un nombre de jours à partir d'une date de référence, DATE-OF-INTEGER prend un certain nombre de jours à partir de la même date de référence et le convertit en 'YYYYMMDD 'format. C'est une simple question de créer une troisième routine pour effectuer de simples calculs arithmétiques utilisant ces fonctions. Jusqu'ici tout va bien.

La partie difficile de votre problème est de déterminer: 5 jours ouvrables. En règle générale, les fins de semaine et certains jours fériés ne sont pas comptés comme des «jours ouvrés». Par conséquent, le nombre réel de jours que vous devez ajouter peut varier de 5 à un nombre supérieur à 5. Par exemple, si les week-ends ne sont pas comptés le jour donné à votre calcul est un vendredi, alors vous devez ajouter 5 + 2 = 7 jours pour tenir compte du fait que le samedi et le dimanche ne sont pas des jours ouvrables.

Si les fins de semaine sont tout ce dont vous avez besoin de s'inquiéter, alors il n'est pas si difficile de savoir quel jour la semaine par jour tombe en utilisant Zeller's Congruence. Puis, en fonction du jour de début de la semaine, vous pouvez facilement déterminer si vous devez ajouter 5, 6 ou 7 jours à la date de début.

La partie la plus difficile est de déterminer les autres «jours non ouvrables».Généralement, vous avez besoin d'une table de recherche pour cette raison simplement parce que la localisation détermine ce que cela sera; et le jour réel de l'année varie pour plusieurs vacances (par exemple, le deuxième lundi du mois). Il n'y a pas de moyen simple d'accomplir cette partie du travail. Dans les systèmes j'ai travaillé sur nous utilisons une routine standard interne que les applications appellent pour obtenir une détermination de la date «non-business». La routine prend une date et un paramètre de localisation comme et renvoie une valeur booléenne Oui/Non selon que la date donnée est une date non commerciale pour la localisation donnée. Je soupçonne que vous aurez besoin de mettre en œuvre quelque chose de similaire. Il est important que vous utilisiez une sorte de routine standard de l'entreprise pour déterminer les dates non commerciales afin de vous assurer que tous vos systèmes sont en conformité les uns avec les autres (moins bon si le système "A" détermine qu'une date donnée est non commerciale jour où le système « B » traite comme un jour ouvrable ordinaire)

0

vous pouvez également effectuer la même chose en utilisant ci-dessous requête SYSDUMMY1:

SELECT (CURDATE()+5 days) 
FROM SYSIBM.SYSDUMMY1 
WITH UR; 

se réfèrent DB2 Basics: Fun with Dates and Times

3

Je vais supposer que vous » ne travaille pas dans un nouveau magasin. Cela étant dit, il devrait y avoir une bibliothèque de fonctions disponibles que les gens ont écrit pour ce genre de tâches - sûrement le vôtre n'est pas la première application qui a besoin de calculer une date en utilisant des jours ouvrables. J'ai été dans quelques magasins et chacun d'entre eux a eu une fonction de date disponible, donc je n'ai jamais eu à s'inquiéter des détails de la manipulation de la date. Si vous finissez par avoir besoin de créer votre propre logique, vous feriez une faveur à tout le monde en créant une fonction, et vous n'êtes pas obligé de l'implémenter dans COBOL.