2013-09-27 141 views
2

我正在開發中的Android應用程序具有必須在22:00設置日曆下週四

每週四,週日執行我需要什麼服務,是設置一個日曆來那一天,時間。但是,我不確定如何去做。

Calendar calendar = Calendar.getInstance(); 

這是給我一個當前日期和時間的日曆。

我知道我可以天,分鐘,小時等等,但是,有什麼辦法可以直接setNext("thursday")

我不想在那裏做很多數學。我的意思是我正在尋找一個答案,它不需要計算直到下個星期四還有多少分鐘/小時/天。

謝謝!

+0

日曆api是可怕的做你想做的。太糟糕了。 – Zavior

+0

你會怎麼做,@Zavior? – Reinherd

+0

有很多的痛苦和時間。當然不是沒有很多數學。 – Zavior

回答

3

我發現下面的解決方案更簡單,更便於攜帶,因爲它不涉及太多數學。一旦您將其設置爲星期四,我相信您可以使用日曆對象上的setTime()方法將其設置爲22:00。

//dayOfWeekToSet is a constant from the Calendar class 
//c is the calendar instance 
public static void SetToNextDayOfWeek(int dayOfWeekToSet, Calendar c){ 
    int currentDayOfWeek = c.get(Calendar.DAY_OF_WEEK); 
      //add 1 day to the current day until we get to the day we want 
    while(currentDayOfWeek != dayOfWeekToSet){ 
     c.add(Calendar.DAY_OF_WEEK, 1); 
     currentDayOfWeek = c.get(Calendar.DAY_OF_WEEK); 
    } 
} 

    //usage: 
    Calendar c = Calendar.getInstance(); 
    System.out.println(c.getTime()); 
    SetToNextDayOfWeek(Calendar.THURSDAY,c); 
    System.out.println(c.getTime()); 
+0

哇。完全正確,非常容易理解,並且有0個數學。 – Reinherd

0

試試這個嗎?

c.add(c.DAY_OF_YEAR, -7); 

c.add(c.DAY_OF_YEAR, +7); 
+0

這是增加7天的實際一天。不是我想要的,就好像我在Monaday上運行它,它將在下一個星期一再次執行。 – Reinherd

0

不是很多數學,解決了這一點,所以清潔:

int weekday = calendar.get(Calendar.DAY_OF_WEEK); 
    if (weekday!=Calendar.THURSDAY){//if we're not in thursday 
     //we calculate how many days till thursday 
     //days = The limit of the week (its saturday) minus the actual day of the week, plus how many days till desired day (5: sunday, mon, tue, wed, thur). Modulus of it. 
     int days = (Calendar.SATURDAY - weekday + 5) % 7; 
     calendar.add(Calendar.DAY_OF_YEAR, days); 
    } 
    //now we just set hour to 22.00 and done. 

感謝:http://www.coderanch.com/t/385117/java/java/date-Monday

我只是修改和解釋的代碼。

+0

我達到了幾乎相同的結果,儘管使用Calenders set-method的解決方案更加複雜。您的解決方案更加清晰:P – Zavior

+0

大部分功勞歸功於:http://www.coderanch.com/t/385117/java/java/date-Monday – Reinherd