20 votes

Comment puis-je vérifier si le jour actuel est un jour ouvrable

J'ai une application qui doit être exécutée pendant les jours ouvrés et pendant les heures de travail.

Dans la configuration de l'application, j'ai défini l'heure de début au format

Lundi-Vendredi
9h00-17h30

Maintenant, j'ai un problème pour vérifier si le jour actuel est dans la plage de jours (pour l'heure c'est facile - analyser l'heure avec DateTime.ParseExact et une simple branche suffira), mais je ne sais pas comment faire pour analyser les jours.

J'ai essayé avec :

JourSemaine jour = DateTime.Now.DaySemaine;
if (jour >= (JourSemaine)Enum.Parse(typeof(JourSemaine), sr.jour_debut) &&
    jour <= (JourSemaine)Enum.Parse(typeof(JourSemaine), sr.jour_fin))
{ /* OK */ }

sr.jour_debut et sr.jour_fin sont des chaînes de caractères

mais le problème est survenu lors des tests du week-end - apparemment, dans l'énumération JourSemaine, le dimanche est le premier jour de la semaine (voir les commentaires sur la page MSDN

Je suppose que je pourrais faire quelques gymnastiques avec le code actuel, mais je recherche le code le plus lisible possible.

Édition Désolé pour le malentendu - les jours ouvrés ne vont pas du lundi au vendredi - ils sont définis sous forme de chaînes dans le fichier de configuration, et ils peuvent même aller du vendredi au samedi - ce qui casse mon code original.

0voto

Chris B. Points 58

Ma solution simple pour déterminer si le jour actuel est un jour ouvrable ou non est:

public static bool IsWorkDay(this DateTime dt)
{
    return IsWorkDay(dt, DayOfWeek.Sunday, DayOfWeek.Saturday);
}

public static bool IsWorkDay(this DateTime dt, params DayOfWeek[] noneWorkDays)
{
    return !noneWorkDays.Contains(dt.DayOfWeek);
}

Il suppose que dimanche / samedi sont des jours non ouvrables. Sinon, l'utilisateur peut spécifier les jours non ouvrables. Et c'est une extension pour faciliter l'utilisation.

Note: Pour éviter une boucle, vous pourriez créer un indicateur de bits.

0voto

JourSemaine Jour = DateTime.Today.DayOfWeek;
int Temps = DateTime.Now.Hour;
if (Jour != DayOfWeek.Saturday && Jour != DayOfWeek.Sunday)
 {
 if (Temps >= 8 && Temps <= 16)
 {
   //C'est les heures de travail en semaine de 8 h à 16 h
 {
 }
else
 {
   // C'est le week-end
 }

-1voto

mattiaerre Points 9

Vous pouvez utiliser l'énumération DayOfWeek pour voir si une date est un dimanche ou un samedi. http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx J'espère que cela peut aider.

-1voto

HatSoft Points 7007

La ligne ci-dessous renverra "dimanche"

chaîne nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("fr-FR")).ToLower();

if(nameOfTheDay != "dimanche" && nameOfTheDay != "samedi")
{
//Faire quelque chose
}

-1voto

zamir Points 11
 public bool IsWeekend(DateTime dateToCheck)
{
    DayOfWeek day = (DayOfWeek) dateToCheck.Day;
    return ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday)); 
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X