2013-09-27 2 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

Wow. Совершенно верно, так легко понять и с 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

Смежные вопросы