求指定周几的下一个循环闹钟

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值