2010-10-08 3 views
10

En utilisant Calendar Je peux obtenir la semaine, l'année et tous les détails de la journée en cours. Comment puis-je naviguer vers un jour particulier dans cette semaine? Par exemple, renvoie 3, ce qui signifie un mardi. Maintenant, je veux aller dire vendredi pour cette semaine ou n'importe quel autre jour de la semaine. Comment puis je faire ça?Java: Obtenir un jour dans une semaine à partir du calendrier

Merci pour vos réponses. Je pense que je dois rendre le scénario plus clair. Fondamentalement, j'essaye de désactiver des alertes d'email dans mon système pendant la période indiquée. Je reçois des valeurs telles que: disableStart = "19-vendredi: 00" disableEnd = "du dimanche 19: 00"

Maintenant, je dois vérifier si le courrier électronique doit être envoyé à un moment donné. par exemple. si aujourd'hui = jeudi à tout moment, envoyez un e-mail mais, si aujourd'hui = samedi n'importe quel temps ne peut pas envoyer selon les valeurs ci-dessus.

+0

Vérifiez l'API DateFormat. Pourrait aider. Pas sûr cependant. –

+0

Copie possible de [Java: obtention de la valeur actuelle du jour de la semaine] (http://stackoverflow.com/questions/2427085/java-getting-current-day-of-the-week-value) –

+0

Je ne sais pas comprendre l'exigence fonctionnelle. Naviguer vers un jour? Huh? – BalusC

Répondre

25

Si je comprends bien, vous pouvez utiliser la méthode Calendar.set (Field, value).

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
Calendar c = Calendar.getInstance(); 
System.out.println(c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(f.format(c.getTime())); 
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
System.out.println(c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(f.format(c.getTime())); 

produit la sortie

6 
08-10-2010 
3 
05-10-2010 
+0

Edité pour inclure un SimpleDateFormat pour montrer le changement du jour de la semaine. –

2

cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

6
Calendar c = Calendar.getInstance(); 
Date date = new Date(); 
c.setTime(date); 
System.out.println("Today: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println("MONDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
System.out.println("TUESDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); 
System.out.println("WEDNESDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); 
System.out.println("THURSDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
System.out.println("FRIDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); 
System.out.println("SATURDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
System.out.println("SUNDAY: " + c.getTime()); 

donne:

Today: Fri Oct 08 15:45:14 CEST 2010 
MONDAY: Mon Oct 04 15:45:14 CEST 2010 
TUESDAY: Tue Oct 05 15:45:14 CEST 2010 
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010 
THURSDAY: Thu Oct 07 15:45:14 CEST 2010 
FRIDAY: Fri Oct 08 15:45:14 CEST 2010 
SATURDAY: Sat Oct 09 15:45:14 CEST 2010 
SUNDAY: Sun Oct 10 15:45:14 CEST 2010 

Quelles coutures pour dire que, au moins sur mon système, les semaines commence le Lundi.

+0

Merci Maurice, c'était exactement ce que je cherchais. –

2

Merci à Kevin et Maurice pour les réponses. Ils m'ont vraiment donné le point de départ. J'ai terminé avec ce code de test, au cas où cela aiderait quelqu'un.

private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin) 
{ 
    Calendar c = Calendar.getInstance(); 
    c.setFirstDayOfWeek(Calendar.MONDAY); 
    Date date = Calendar.getInstance().getTime(); 
    c.setTime(date); 
    c.set(Calendar.DAY_OF_WEEK, nDay); 
    c.set(Calendar.HOUR_OF_DAY, nHour); 
    c.set(Calendar.MINUTE, nMin); 
    return c.getTime(); 
} 

public static void main(String[] args) 
{ 
    Date start = getTimeForAnyDayInWeek(6, 19, 00); 
    Date end = getTimeForAnyDayInWeek(8, 19, 00); 
    Date c = new Date(); 

    if (start.before(c) && c.before(end)) 
     System.out.println("BLOCK"); 
    else 
     System.out.println("SEND"); 
} 

Merci, Anubhav

2

Ceci est un exemple parfait de pourquoi jodatime est si bon, voici mon code similaire

DateTime dt = new DateTime(); //current datetime, jodatime format 
    DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday"); 
    Date convertedtorubbishdateformat = fridayLastWeek.toDate(); 

je perdre beaucoup de temps witht il java norme date/calendrier. Ensuite, j'ai eu jodatime, vous ne regretterez pas, il sera apparemment utilisé dans le cadre de la norme Java à l'avenir. Je n'ai pas pris la peine de télécharger le pot depuis des lustres, j'aurais aimé le faire, vous ne le regretterez pas.

Questions connexes