android - 如何在设置闹钟前查看闹钟时间是否已过?

标签 android alarmmanager android-alarms

我尝试了下面的方法来检查闹钟时间和当前时间(以毫秒为单位),在大多数情况下它工作正常但是当我为例如设置闹钟时。 @4:07 p.m(即刚好过了几分钟)然后比较失败..

operation_morn = PendingIntent.getBroadcast(getBaseContext(), RQS_morn,
                intent, 0);
        Calendar calNow = Calendar.getInstance();
        long current_time = calNow.getTimeInMillis();
        // Calendar calSet = (Calendar) calNow.clone();
        // calNow.set(selected_Year, selected_Month, selected_Day);
        calNow.set(Calendar.DAY_OF_MONTH, selected_Day);
        calNow.set(Calendar.MONTH, (selected_Month - 1));
        calNow.set(Calendar.YEAR, selected_Year);
        calNow.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hours));
        calNow.set(Calendar.MINUTE, Integer.parseInt(minutes));
        calNow.set(Calendar.AM_PM, Calendar.AM);



        long alarm_time_in_millis = calNow.getTimeInMillis();
        if (alarm_time_in_millis > current_time) {
            alarmManager.set(AlarmManager.RTC_WAKEUP, calNow.getTimeInMillis(),
                    operation_morn);

        }

最佳答案

问题来了

calNow.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hours)); // It sets hour for 24 hours format.

应该是

calNow.set(Calendar.HOUR, Integer.parseInt(hours));

这是错误的,因为您正在通过 calNow.set(Calendar.AM_PM, Calendar.AM) 自行设置 AM/PM。如果您处理 24 小时格式,则仅删除此行。这将解决您的问题。


对于时间比较,您可以使用 Timestamp ,它有比较两次的方法。尽管您可以使用 Calender也可以比较时间。

Timestamp alramTimeStamp = new Timestamp(calNow.getTimeInMillis());
Timestamp currentTimeStamp = new Timestamp(current_time);
if (alramTimeStamp.after(currentTimeStamp)) {
    alarmManager.set(AlarmManager.RTC_WAKEUP, calNow.getTimeInMillis(),
            operation_morn);
}

关于android - 如何在设置闹钟前查看闹钟时间是否已过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24057257/

相关文章:

java - 为什么我会收到空​​指针异常?

android - AppBarLayout 在 setVisibility(View.GONE) 后占用空间

android - 将光标设置在 EditText 的右侧,提示重力居中

android - 在实时应用程序的后台运行重复任务

java - AlarmManager 没有触发我的服务

android - 如何使用服务每小时显示本地通知

java - 无法解析符号 'create'

android - 在android中上传进度条?

android - 如何在 android 中重复闹钟工作日

android - 显示 "left time"直到闹钟开始