public static Calendar calculateNextAlarm(int hour, int minute, int daysOfWeek, long minimumTime) {
// newRecord with now
Calendar c = Calendar.getInstance();
c.setTimeInMillis(minimumTime);
int nowHour = c.get(Calendar.HOUR_OF_DAY);
int nowMinute = c.get(Calendar.MINUTE);
// if alarmclock is behind current time, advance one day
if (hour < nowHour ||
hour == nowHour && minute <= nowMinute) {
c.add(Calendar.DAY_OF_YEAR, 1);
}
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
int addDays = getNextAlarm(c, daysOfWeek);
/*Log.v("MainActivity", "** TIMES * " + c.getTimeInMillis() + " hour " + hour +
" minute " + minute + " dow " + c.get(Calendar.DAY_OF_WEEK) + " from now " +
addDays);*/
if (addDays > 0) c.add(Calendar.DAY_OF_WEEK, addDays);
return c;
}
/**
* returns number of days from today until next alarmclock
*
* @param c must be set to today
* @param mDays alarmclock-clock internal days representation
* @return days count
*/
private static int getNextAlarm(Calendar c, int mDays) {
if (mDays == 0) return -1;
int today = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7;
LogUtil.v("MainActivity", "today is " + today);
int day, dayCount;
for (dayCount = 0; dayCount < 7; dayCount++) {
day = (today + dayCount) % 7;
if ((mDays & (1 << day)) > 0) {
break;
}
}
return dayCount;
}
求指定周几的下一个循环闹钟
最新推荐文章于 2021-05-26 08:07:31 发布