Java 如何基于LocalTime列表创建通知?
我有一个LocalTime列表,我需要循环抛出它们并分别返回小时和分钟,以便将它们添加到通知中 当我单独处理它们时,可以使用getHour()或getMinute()方法,但在列表中它不起作用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.
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);
});
}