Java 如何基于LocalTime列表创建通知?

Java 如何基于LocalTime列表创建通知?,java,android,algorithm,arraylist,android-notifications,Java,Android,Algorithm,Arraylist,Android Notifications,我有一个LocalTime列表,我需要循环抛出它们并分别返回小时和分钟,以便将它们添加到通知中 当我单独处理它们时,可以使用getHour()或getMinute()方法,但在列表中它不起作用 String q = "01:00:00"; String w = "02:00:00"; String e = "03:00:00"; String r = "04:00:00"; LocalTime qq = LocalTime.parse(q); LocalTime ww = LocalTime.

我有一个LocalTime列表,我需要循环抛出它们并分别返回小时和分钟,以便将它们添加到通知中

当我单独处理它们时,可以使用getHour()或getMinute()方法,但在列表中它不起作用

String q = "01:00:00";
String w = "02:00:00";
String e = "03:00:00";
String r = "04:00:00";

LocalTime qq = LocalTime.parse(q);
LocalTime ww = LocalTime.parse(w);
LocalTime ee = LocalTime.parse(e);
LocalTime rr = LocalTime.parse(r);

List<LocalTime> listTimes = new ArrayList<>();
        listTimes.add(qq);
        listTimes.add(ww);
        listTimes.add(ee);
        listTimes.add(rr);


for(int i=0 ; i<=listTimes.size() ; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY,listTimes.get(i).getHour());
                calendar.set(Calendar.MINUTE, listTimes.get(i).getMinute());
                calendar.set(Calendar.SECOND, listTimes.get(i).getSecond());


         Intent intent = new Intent(getApplicationContext(), Notification_reciever.class);

                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);

                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);      
     }

通知当我单独设置它而没有for循环时,它工作没有问题,但是当我为列表添加循环时,它不工作

我将停止使用
java.util.Calendar
并完全切换到
java.time

如果您有一个时间列表,并且希望将它们与当前日期相结合(我猜是通过使用
java.util.Calendar.getInstance()
),那么,您只需将今天的
java.time.LocalDate
与解析的
LocalTime
组合成
java.time.LocalDateTime
,并使用其以毫秒为单位获取时间的可能性:

public static void main(String[] args) {
    String q = "01:00:00";
    String w = "02:00:00";
    String e = "03:00:00";
    String r = "04:00:00";

    LocalTime qq = LocalTime.parse(q);
    LocalTime ww = LocalTime.parse(w);
    LocalTime ee = LocalTime.parse(e);
    LocalTime rr = LocalTime.parse(r);

    List<LocalTime> listTimes = new ArrayList<>();
    listTimes.add(qq);
    listTimes.add(ww);
    listTimes.add(ee);
    listTimes.add(rr);

    // find out what day today is and do that outside the loop
    LocalDate today = LocalDate.now();

    // iterate/stream all the parsed times
    listTimes.forEach(time -> {
        // combine the time with today
        LocalDateTime dateTime = LocalDateTime.of(today, time);
        // then convert it to an Instant (choose the offset you need) and get the millis
        long timeInMillis = dateTime.atZone(ZoneId.systemDefault())
                                .toInstant()
                                .toEpochMilli();

        Intent intent = new Intent(getApplicationContext(), Notification_reciever.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
                                                                100,
                                                                intent,
                                                                PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                                    // use the millis here then
                                    timeInMillis,
                                    AlarmManager.INTERVAL_DAY,
                                    pendingIntent);
    });
}
publicstaticvoidmain(字符串[]args){
字符串q=“01:00:00”;
字符串w=“02:00:00”;
字符串e=“03:00:00”;
字符串r=“04:00:00”;
LocalTime qq=LocalTime.parse(q);
LocalTime ww=LocalTime.parse(w);
LocalTime ee=LocalTime.parse(e);
LocalTime rr=LocalTime.parse(r);
List listTimes=new ArrayList();
添加(qq);
添加(ww);
添加(ee);
添加(rr);
//找出今天是哪一天,并在循环之外进行
LocalDate today=LocalDate.now();
//迭代/流化所有解析的时间
listTimes.forEach(时间->{
//把时间和今天结合起来
LocalDateTime dateTime=LocalDateTime.of(今天,时间);
//然后将其转换为一个瞬间(选择所需的偏移量)并获得毫秒
long-timeInMillis=dateTime.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
Intent Intent=newintent(getApplicationContext(),Notification\u receiver.class);
PendingEvent PendingEvent=PendingEvent.getBroadcast(getApplicationContext(),
100,
意图
PendingEvent.FLAG_UPDATE_CURRENT);
AlarmManager AlarmManager=(AlarmManager)getSystemService(报警服务);
alarmManager.setRepeating(alarmManager.RTC_唤醒,
//那就在这儿用米利斯吧
时间单位为毫秒,
AlarmManager.INTERVAL_DAY,
悬挂式);
});
}

一旦我更改了它,就不会收到任何通知all@AbdallahRizk你在哪个时区?我在代码中做了偏移UTC,所以把它改成你的,看看会发生什么。我不知道该怎么改变它,但是我在中东特别是沙特。arabia@AbdallahRizk我更新了答案中的代码,请尝试一下。。。正是使用UTC的那一行被使用其运行系统的默认时区的那一行所取代。@AbdallahRizk听起来像是在覆盖单个警报,而不是创建警报列表。。。但这绝对是另一个问题;-)
public static void main(String[] args) {
    String q = "01:00:00";
    String w = "02:00:00";
    String e = "03:00:00";
    String r = "04:00:00";

    LocalTime qq = LocalTime.parse(q);
    LocalTime ww = LocalTime.parse(w);
    LocalTime ee = LocalTime.parse(e);
    LocalTime rr = LocalTime.parse(r);

    List<LocalTime> listTimes = new ArrayList<>();
    listTimes.add(qq);
    listTimes.add(ww);
    listTimes.add(ee);
    listTimes.add(rr);

    // find out what day today is and do that outside the loop
    LocalDate today = LocalDate.now();

    // iterate/stream all the parsed times
    listTimes.forEach(time -> {
        // combine the time with today
        LocalDateTime dateTime = LocalDateTime.of(today, time);
        // then convert it to an Instant (choose the offset you need) and get the millis
        long timeInMillis = dateTime.atZone(ZoneId.systemDefault())
                                .toInstant()
                                .toEpochMilli();

        Intent intent = new Intent(getApplicationContext(), Notification_reciever.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
                                                                100,
                                                                intent,
                                                                PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                                    // use the millis here then
                                    timeInMillis,
                                    AlarmManager.INTERVAL_DAY,
                                    pendingIntent);
    });
}