Java 如何为特定日期、小时、分钟和秒设置AlarmManager

Java 如何为特定日期、小时、分钟和秒设置AlarmManager,java,android,datetime,time,java-time,Java,Android,Datetime,Time,Java Time,警报在指定时间不工作 (2018年12月20日,12:10:02) 这个代码有什么问题 Calendar c = Calendar.getInstance(); c.set(Calendar.MONTH,12); c.set(Calendar.YEAR,2018); c.set(Calendar.DAY_OF_MONTH,20); c.set(Calendar.HOUR_OF_DAY,12); c.set(Calendar.MINUTE,10); c.set(Calendar.SECOND,2)

警报在指定时间不工作 (2018年12月20日,12:10:02)

这个代码有什么问题

Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH,12);
c.set(Calendar.YEAR,2018);
c.set(Calendar.DAY_OF_MONTH,20);
c.set(Calendar.HOUR_OF_DAY,12);
c.set(Calendar.MINUTE,10);
c.set(Calendar.SECOND,2);

Intent intent = new Intent(ProfileList.this, IntentBroadcastedReceiver.class);
PendingIntent pintent = PendingIntent.getService(ProfileList.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 30*1000, pintent);

改用
java.time
api:

LocalDateTime用于表示日期和时间的组合

有关数据,请参阅本指南:


对于早于26的Android,使用ThreeTenABP项目,该项目将ThreeTen Backport项目进行了调整,该项目将java.time的大部分功能向后移植到java 6和7。

使用
java.time
api:

LocalDateTime用于表示日期和时间的组合

有关数据,请参阅本指南:


对于26岁之前的Android,使用ThreeTenABP项目,该项目将ThreeTen Backport项目进行了调整,该项目将java.time的大部分功能向后移植到java 6和7。

我知道了,从0开始的一个月。应该是:

c.set(Calendar.MONTH,11); //December

我知道了,月从0开始。应该是:

c.set(Calendar.MONTH,11); //December

以下代码适用于我:

 // for Alarm 15/09/2018 at 12.00   
 Calendar myAlarmDate = Calendar.getInstance();
 myAlarmDate.setTimeInMillis(System.currentTimeMillis());
 myAlarmDate.set(2012, 09, 15, 12, 00, 0);
 AlarmManager alarmManager = (AlarmManager)

 context.getSystemService(Context.ALARM_SERVICE);

 Intent _myIntent = new Intent(context,AlarmReceiverNotificationForEveryMonth.class);
 _myIntent.putExtra("MyMessage","HERE I AM PASSING THEPERTICULAR MESSAGE WHICH SHOULD BE SHOW ON RECEIVER OF ALARM");
 PendingIntent _myPendingIntent = PendingIntent.getBroadcast(context, 123, _myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
 alarmManager.set(AlarmManager.RTC_WAKEUP, myAlarmDate.getTimeInMillis(),_myPendingIntent);

希望它能对您有所帮助。

以下代码适用于我:

 // for Alarm 15/09/2018 at 12.00   
 Calendar myAlarmDate = Calendar.getInstance();
 myAlarmDate.setTimeInMillis(System.currentTimeMillis());
 myAlarmDate.set(2012, 09, 15, 12, 00, 0);
 AlarmManager alarmManager = (AlarmManager)

 context.getSystemService(Context.ALARM_SERVICE);

 Intent _myIntent = new Intent(context,AlarmReceiverNotificationForEveryMonth.class);
 _myIntent.putExtra("MyMessage","HERE I AM PASSING THEPERTICULAR MESSAGE WHICH SHOULD BE SHOW ON RECEIVER OF ALARM");
 PendingIntent _myPendingIntent = PendingIntent.getBroadcast(context, 123, _myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
 alarmManager.set(AlarmManager.RTC_WAKEUP, myAlarmDate.getTimeInMillis(),_myPendingIntent);

希望对您有所帮助。

什么不起作用?在标题中,您提到了alarm manager,但您的代码仅包括Calendar实例。您当前的代码中是否缺少一些部分,我们可以了解完整情况?这里也回答了同样的问题@鲁格韦德说,这个问题是8年前提出的。从那时起,一个更好的api被引入了。@ruggedmara似乎问题在于设置日历时什么不起作用?在标题中,您提到了alarm manager,但您的代码仅包括Calendar实例。您当前的代码中是否缺少一些部分,我们可以了解完整情况?这里也回答了同样的问题@鲁格韦德说,这个问题是8年前提出的。从那时起,一个更好的api被引入了。@rugfedmara问题似乎是在设置日历时为什么不使用日历。12月?这是一个问题,不,这是旧的和过时的
日历类的两个问题:(1)它使用基于0的月份(2)对于标准设置,当您将月份或任何其他字段设置为无效值时,它不会反对。而是使用
java.time
。请看。为什么不使用Calendar.DECEMBER?这是一个,不,这是旧的和过时的
Calendar
类的两个问题:(1)它使用基于0的月份(2)标准设置,当您将月份或任何其他字段设置为无效值时,它不会反对。而是使用
java.time
。看见