我尝试了下面的方法来检查闹钟时间和当前时间(以毫秒为单位),在大多数情况下它工作正常但是当我为例如设置闹钟时。 @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/