Java 为什么要为重复报警设置星期几;如果今天';星期天怎么样?
我在android中使用alarmmanager为用户选择的天数设置一个重复警报,这很好,但如果实际的日期是星期天,则不正确。让我看看。如果今天是星期日(7),我将闹钟设置为星期一(8)和星期二(9),当我看到calendar toString()时,配置的日期是7,不要更改,但如果今天是另一天,则只在今天是星期日时才正常工作Java 为什么要为重复报警设置星期几;如果今天';星期天怎么样?,java,android,date,alarmmanager,repeatingalarm,Java,Android,Date,Alarmmanager,Repeatingalarm,我在android中使用alarmmanager为用户选择的天数设置一个重复警报,这很好,但如果实际的日期是星期天,则不正确。让我看看。如果今天是星期日(7),我将闹钟设置为星期一(8)和星期二(9),当我看到calendar toString()时,配置的日期是7,不要更改,但如果今天是另一天,则只在今天是星期日时才正常工作 calendar.set(Calendar.HOUR_OF_DAY,h) calendar.set(Calendar.MINUTE,m) calendar.set(Cal
calendar.set(Calendar.HOUR_OF_DAY,h)
calendar.set(Calendar.MINUTE,m)
calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY)//repeating for Monday if today is Sunday 8, and I set MONDAY, the new date most be Monday 9
Log.d("test",calendar.toString())
发生了什么事?java.time通过desugaring
考虑使用java.time(现代java日期和时间API)进行日期和时间工作
LocalTime alarmTime = LocalTime.of(23, 45);
ZonedDateTime alarmDateTime = ZonedDateTime.now(ZoneId.of("Africa/Porto-Novo"))
.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
.with(alarmTime);
System.out.println("Alarm date and time: " + alarmDateTime);
刚刚运行时的输出(2月8日,星期一):
报警日期和时间:2021-02-15T23:45+01:00[非洲/诺和港]
如果您希望警报今天就已经发生,请使用nextOrSame()
而不是next()
你的代码出了什么问题?
虽然程序员经常会遇到有关Calendar
类的许多令人困惑的问题之一,但您遇到了其中两个问题:
calendar.set(calendar.DAY/OF\u WEEK,calendar.MONDAY)
可以将calendar
对象的日期设置为上一个星期一或下一个星期一。它选择哪一个不仅取决于星期几,还取决于日历
对象的设置,这在不同的设备上通常是不同的calendar.toString()
时,得到的字符串将不会反映更改星期几后对calendar
对象所做的必要更改。我很快就会想到星期几已经改变了,但是旧的月日值仍然会被打印出来。我不会好好研究文档,给你一个准确的答案。在调用get()
或导致重新计算的其他指定方法之前,Calendar
不会计算其字段日历有很多原因
问:java.time不需要Android API级别26吗?
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
org.threeten.bp
导入日期和时间类
链接
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口
到Java6和Java7(JSR-310为三十)
如果这是针对Android的,你应该这么说。在这种情况下,你的实际问题是什么?警报器不响了吗?它会引发异常吗@问题是警报没有触发,因为如果今天是星期天,不要更改星期一的日期,但是。。。您明确地将日历设置为星期一,对吗?那么为什么当前的工作日会影响结果呢?是的。但是,如果今天是星期天,不要把它定为星期一。你明白我的意思吗?