Comment obtenir de la prochaine journée de travail, à l'exclusion des week-ends et les jours fériés
J'ai une exigence où j'ai besoin de travailler sur un champ de date, de sorte que l'obligation est quelque chose comme cela
Je vais appeler le champ comme minimum possible de la date de
- Ajouter +1 à la date
- Si le minimum possible de la date tombe pendant un week-end(Samedi ou le Soleil) après l'ajout de 1 jour, Affichage de la prochaine journée de travail, je.e du lundi
- Si le minimum possible de la date tombe un jour Férié, l'affichage de la prochaine journée de travail. (Vacances 1.1 , 1.5 , 3.10 , 25.12 , 26.12)
- Si le minimum possible de la date tombe pendant un week-end(Samedi ou le Soleil) après l'ajout de 1 jour, et le jour d'après est un jour férié alors montrer la prochaine journée de travail. Par exemple: Après +1 jour si min jour est le samedi, nous aurons pour afficher le lundi. Mais si le lundi est un jour de congé, alors, nous pouvons afficher le mardi.
J'ai essayé une solution pour le problème ci-dessus par le fait d'avoir plusieurs si et dans d'autre cas, mais je me demandais si il existe un médicament générique et gracieuse façon de faire?
J'ai essayé
var Holidays = new List<DateTime>();
Holidays.Add(new DateTime(DateTime.Now.Year,1,1));
Holidays.Add(new DateTime(DateTime.Now.Year,1,5));
Holidays.Add(new DateTime(DateTime.Now.Year,3,10));
Holidays.Add(new DateTime(DateTime.Now.Year,12,25));
if(date.DayOfWeek === DayOfWeek.Saturday || date.DayOfWeek === DayOfWeek.Sunday)
{
//Logic to add +1 and again some logic to check for weekends and weekdays
}
else if(holidays.Contain(date))
{
//Logic to add +1 and again some logic to check for weekends and weekdays
}
OriginalL'auteur CSharped | 2015-10-27
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous voulez obtenir à la prochaine journée de travail. Donc, vous pourriez boucle à cette condition que l'ajout de 1 jour à la date actuelle
Dans le code précédent
IsHolliday
est un prédicat de dire si une date est holliday. Par exemple, sans vergogne de réutiliser votre code:IsHoliday
une fonction permet d'éviter la création d'une liste statique de vacances et, au lieu de calculer à la volée pour la date/de l'année passée - ce qui est important pour les dates de Pâques qui se déplacent.Qu'est-ce que
IsHolliday(date)
? Cette méthode existe pas ?Vous avez à mettre en œuvre cette méthode vous-même. Par exemple, vous pouvez insérer le code de l'OP a écrit pour vérifier si une date est en vacances.
J'aime cette mise en œuvre mieux. Plus simple que les autres.
Serait un peu plus sympa si GetNextWorkingDay() a retourné la même date adoptée que si elle était une Journée de travail - c'est à dire enlever l'hypothèse que le jour doit avoir été déjà été calculé pour être un jour de Semaine. Probablement le faire avec une boucle while sans le "ne"
OriginalL'auteur fjardon
Une liste fixe des dates est un peu limité pour exprimer les vacances.
Considérez que votre liste ne contient que les dates pour l'année en cours, donc, si aujourd'hui est le 30 décembre 2015, puis à la prochaine fête serait le 1er janvier 2016, que vous ne trouverez pas dans votre liste.
Considèrent également que beaucoup de vacances ne tombent pas à la même date chaque année. Souvent, ils sont liés à la journée de la semaine, et parfois ils sont déterminés par des calendriers religieux, ou de manière arbitraire.
Un système plus solide doit traiter une variété de différents types de vacances. Voici une implémentation possible:
Avec ces définies, nous pouvons maintenant définir les vacances beaucoup plus robuste, tels que:
Et maintenant, nous pouvons créer une méthode qui vérifie pour la prochaine journée de travail, comme vous l'avez demandé:
Cette méthode pourrait aller de l'abstrait
Holiday
classe, ou il peut aller n'importe où, vraiment.Exemple d'utilisation (avec la définition ci-dessus pour
holidays
):Ce n'est pas encore tout à fait une solution complète. De nombreuses fêtes ont plus des règles de calcul complexes. Comme un exercice laissé au lecteur, essayez de mettre en œuvre une classe qui dérive de
Holiday
pour la deuxième journée NOUS vacances de Thanksgiving. Le premier jour sera toujours tomber sur le 4ème jeudi de novembre, mais le deuxième jour, est toujours "le vendredi suivant le 4ème jeudi de novembre", plutôt que de simplement "le 4e vendredi du mois de novembre" (voir le novembre 2019 pour un exemple de cas où cette matière).OriginalL'auteur Matt Johnson
Basé sur la réponse de @fjardon, vous pouvez utiliser Nager.Date il contient Week-end de la logique de différents pays et contient des jours fériés pour les plus de 70 pays.
nuget
Extrait de Code
OriginalL'auteur Tino Hager
datesAhead
de latargetDate
au lieu de la date actuelle. Ensuite, il n'y a pas besoin de laa > targetDate
.Vous êtes de droite. Je n'ai même pas besoin de 100 jours.
Eh bien, puisque il ne itérer jusqu'à ce qu'il obtient un match, le comte passé à
Enumerable.Range
juste besoin d'être plus que ce que le nombre maximum de jours jusqu'à la prochaine journée de travail, pourrait être. Ma conjecture est que 5 ou 6, mais la rendre plus grande de ne pas avoir un effet négatif.OriginalL'auteur Cetin Basoz
J'ai eu la même exigence dans mon projet , et j'ai récupéré à l'aide de SQl Server.
Si vous pouvez le faire en SQL server , nous avons très simple requête qui retourne le jour ouvrable suivant.
Explication :
Toujours à la date de base est "1900 jan 1 st" Que par DB
19000101 --> lundi --> -- Donc le résultat est ALORS la VALEUR =1 jour
19000102 --> mardi --> -- Donc le résultat est ALORS la VALEUR =1 jour
19000103 --> mercredi --> -- Donc le résultat est ALORS la VALEUR =1 jour
19000104 --> jeudi --> -- Donc le résultat est ALORS la VALEUR =1 jour
19000105 --> vendredi --> -- Donc le résultat est 7-@number = 3 jours
19000106 --> samedi --> -- Donc le résultat est 7-@number =2 jours
19000107 --> dimanche --> -- Donc le résultat est 7-@number =1 jour
OriginalL'auteur