web-dev-qa-db-fra.com

Vérifiez si DAY_OF_WEEK se situe entre le lundi et le vendredi

J'essaie de créer une méthode qui vérifie si "aujourd'hui" se situe entre le lundi et le vendredi. Pour cela, je reçois avec cette ligne 'int day = Calendar.DAY_OF_WEEK;' le jour réel. Après cela, je remplis une liste de tableaux avec les jours (lundi, mardi, mercredi, jeudi et vendredi). Maintenant, quand je vérifie si le jour réel est dans ma liste de tableaux, je mets boolean DAY = true sinon je mets boolean DAY = false. J'ai essayé la méthode aujourd'hui et hier, mais elle définit toujours le booléen sur faux.

De quoi ai-je besoin pour changer le fonctionnement de mon code? Vous trouverez le code ici.

Code

                int day = Calendar.DAY_OF_WEEK;
                ArrayList<Integer> daylist = new ArrayList<Integer>();
                daylist.add(Calendar.MONDAY);
                daylist.add(Calendar.TUESDAY);
                daylist.add(Calendar.WEDNESDAY);
                daylist.add(Calendar.THURSDAY);
                daylist.add(Calendar.FRIDAY);

                if (daylist.contains(day)){
                    DAY = true;
                }else{
                    DAY = false;
                }
18
safari

Wow, c'est comme essayer de tuer un moustique avec une ogive thermo-nucléaire :-)

Java garantit (en 1.5) (inchangé jusqu'à 1.8 au moins) que les valeurs de SUNDAY à SATURDAY sont contiguës (1 à 7) il s'agit donc simplement de vérifier une plage.

Pourtant, DAY_OF_WEEK n'est pas pas le jour de la semaine, c'est un numéro de champ (avec la valeur 7) à transmettre au getter à récupérer le jour de la semaine. La seule fois Calendar.DAY_OF_WEEK lui-même correspondra à un jour réel sera le samedi.

Vous pouvez utiliser du code tel que:

Calendar myDate = Calendar.getInstance(); // set this up however you need it.
int dow = myDate.get (Calendar.DAY_OF_WEEK);
boolean isWeekday = ((dow >= Calendar.MONDAY) && (dow <= Calendar.FRIDAY));

Par la suite, isWeekday sera vrai si et seulement si le jour de myDate était du lundi au vendredi inclus.

51
paxdiablo

int day = Calendar.DAY_OF_WEEK; devrait plutôt être

Calendar cal; // The calendar object
....your other code for getting the date goes here....
int day = cal.get(Calendar.DAY_OF_WEEK);

Votre code actuel obtient juste la valeur de la constante Calendar.DAY_OF_WEEK.

6
Ken Y-N

Cela devrait faire l'affaire pour vous, je suppose.

int day = cal.get(Calendar.DAY_OF_WEEK);
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY){
    DAY = true;
}else{
    DAY = false;
}
3
erbsman

Premier Calendar.DAY_OF_WEEK est un champ entier vous donnera toujours 7. Vous devez créer une instance d'un calendrier comme Calendar cal = Calendar.getInstance (); Par défaut, il vous donne la date actuelle dans le fuseau horaire actuel. Ensuite, vous pouvez appeler cal.get (Calendar.DAY_OF_WEEK); qui vous donnera n'importe quel jour entre dimanche et samedi

Maintenant, vous pouvez vérifier quelque chose comme ça

    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
         System.out.println("Weekend");
     } else {
        System.out.println("Weekday");
     }

Vous pouvez appliquer cette logique à votre problème !!

1
RP-
int day = Calendar.DAY_OF_WEEK;

La logique est brisée ici. DAY_OF_WEEK est une constante identifiant le type de données que nous devons récupérer à partir d'une instance Calendar.

La solution la plus simple à votre problème (depuis Calendar.FRIDAY> ...> Calendar.MONDAY) est

Calendar now = Calendar.getInstance();
int day = now.get(Calendar.DAY_OF_WEEK);
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY)
  // do something
1
afk5min