日历没有返回正确的时间

Calendar not returning the correct time

我想从时间选择器中选择一个时间,并使用 AlarmManager 为该时间设置一个闹钟。 当我使用 when.getTimeInMillis 时,返回的值与我设置的时间不同。

例如,如果我将时间设置为 20:40 并打印 when.getTime 的值,我将从第二天开始得到 17:12。

为什么会这样?

从时间选择器获取时间

MedicationReminder mr=new MedicationReminder(getApplicationContext());
int hour = tp.getCurrentHour();
int min = tp.getCurrentMinute();
Calendar c=Calendar.getInstance();
c.add(Calendar.HOUR, hour);
c.add(Calendar.MINUTE, min);
mr.setReminder(new Medication(name,quant_aux,time),c);

设置闹钟

Intent i = new Intent(mContext, MedicationReceiver.class);
i.putExtra("medName",medication.getName());
i.putExtra("medQuant",medication.getQuantity());
PendingIntent pi=PendingIntent.getBroadcast(mContext,0,i,0);
mAlarmManager.set(AlarmManager.RTC_WAKEUP,when.getTimeInMillis(),pi);

而不是

Calendar c=Calendar.getInstance();
c.add(Calendar.HOUR, hour);
c.add(Calendar.MINUTE, min);

试试

Calendar c=Calendar.getInstance();
c.set(Calendar.HOUR, hour);
c.set(Calendar.MINUTE, min);

如果要使用 24 小时格式,则使用

c.set(Calendar.HOUR_OF_DAY, hour);

我不是 100% 是问题所在,因为您没有包含所有代码,但我认为您将当前时间增加了 20 小时,而不是将日历设置为 20 小时。

另一个注意事项:我认为 getCurrentHour() 和 getCurrentMinute() 自 API 23 以来已被弃用,因此我建议您改用 getHour() 和 getMinute()。