2010-10-08 6 views
10

Za pomocą Calendar Mogę uzyskać tydzień, rok i wszystkie szczegóły dotyczące bieżącego dnia. Jak mogę przejść do konkretnego dnia w tym tygodniu?Java: Uzyskaj dowolny dzień w tygodniu z Kalendarza

Powiedz, calendar.get(Calendar.DAY_OF_WEEK); zwraca 3, co oznacza wtorek. Teraz chciałbym powiedzieć w piątek na ten tydzień lub dowolny inny dzień w tym tygodniu. Jak mogę to zrobić?

Dzięki za odpowiedzi. Myślę, że muszę wyjaśnić ten scenariusz. Zasadniczo próbuję wyłączyć powiadomienia e-mail w moim systemie w określonym czasie. uzyskać wartości jak: disableStart = "Friday-19: 00" disableEnd = "Sunday-19: 00"

Teraz muszę sprawdzić, czy e-mail należy przesłać w określonym czasie. np. jeśli dzisiaj = czwartek w dowolnym momencie, wyślij e-mail , ale jeśli dzisiaj = sobota, w dowolnym momencie nie można wysłać zgodnie z powyższymi wartościami.

+0

Sprawdź interfejs API DateFormat. Może pomóc. Nie jestem tego pewien. –

+0

Prawdopodobny duplikat [Java: pobieranie aktualnej wartości dnia tygodnia] (http://stackoverflow.com/questions/2427085/java-getting- current-day- the-wee-value) –

+0

Nie do końca zrozumieć wymagania funkcjonalne. Przejdź do jednego dnia? Huh? – BalusC

Odpowiedz

25

Jeśli dobrze rozumiem, możesz użyć metody 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())); 

tworzony jest wydruk

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

Edytowany w celu uwzględnienia SimpleDateFormat, aby pokazać dzień tygodnia. –

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

otrzymujemy:

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 

Które szwy oznaczać, że przynajmniej w moim systemie, tydzień rozpoczyna się w poniedziałek.

+0

Dzięki Maurice, to było dokładnie to, czego szukałem. –

2

Podziękowania dla Kevina i Maurice za odpowiedzi. Naprawdę dali mi punkt wyjścia.

Skończyłem z tym kodem testu, na wypadek, gdyby pomogło komukolwiek.

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

Dzięki Anubhav

2

Jest to doskonały przykład dlaczego jodatime jest tak dobry, tu jest mój podobny kod

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

użyłem tracić tyle czasu witht on standardowy java data/kalendarz. Potem dostałem jodobime, nie pożałujesz, najwyraźniej będzie ono używane jako część standardowej javy w przyszłości. Nie zawracałem sobie głowy odkładaniem słoika na wieki, szkoda, że ​​już tego nie zrobiłem, nie pożałujesz.