2010-10-08 24 views
10

utilizzando Calendar Posso ottenere la settimana, l'anno e tutti i dettagli per il giorno corrente. Come posso navigare in un giorno particolare in quella settimana?Java: ottenere qualsiasi giorno in una settimana dal calendario

Say, calendar.get(Calendar.DAY_OF_WEEK); restituisce 3, che significa un martedì. Ora, voglio andare a dire venerdì per quella settimana o qualsiasi altro giorno in quella settimana. Come lo posso fare?

Grazie per le vostre risposte. Penso di aver bisogno di rendere lo scenario più chiaro. Fondamentalmente, sto cercando di disabilitare gli avvisi e-mail nel mio sistema durante il periodo specificato. ottengo valori come: disableStart = "VENERDI 19: 00" disableEnd = "DOMENICA-19: 00"

Ora, ho bisogno di verificare se e-mail deve essere inviato in un momento particolare. ad es. se oggi = giovedì in qualsiasi momento, invia l'e-mail ma, se oggi = sabato, qualsiasi momento non può inviare come per i valori sopra indicati.

+0

Controllare l'API DateFormat. Potrebbe aiutare. Non sono sicuro però. –

+0

Possibile duplicato di [Java: ottenere il valore del giorno della settimana corrente] (http://stackoverflow.com/questions/2427085/java-getting-current-day-of-the-week-value) –

+0

Non mi piace capire il requisito funzionale Vai a un giorno? Eh? – BalusC

risposta

25

Se ho capito bene, è possibile utilizzare il metodo Calendar.set (Campo, valore).

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())); 

produce l'output

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

Modificato per includere un SimpleDateFormat per mostrare il cambio del giorno della settimana. –

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()); 

Dà:

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 

Quali cuciture a significare che, almeno sul mio sistema, le settimane inizia la Lunedi.

+0

Grazie Maurice, questo era esattamente quello che stavo cercando. –

2

Grazie a Kevin e Maurice per le risposte. Mi hanno davvero dato il punto di partenza.

Ho finito con questo codice di test, nel caso in cui aiuti qualcuno.

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"); 
} 

Grazie, Anubhav

2

Questo è un perfetto esempio del perché jodatime è così buono, ecco il mio codice simile

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

ho usato per perdere tanto tempo dormivamo con Java Standard data/calendario. Poi ho avuto jodatime, non ti pentirai, apparentemente sarà usato come parte del java standard in futuro. Non mi sono preso la briga di scodellare il vasetto per anni, vorrei averlo fatto, non te ne pentirai.

Problemi correlati