java - 设置当前或 future 日期的闹钟

标签 java android date alarmmanager

我目前正在从数据库中获取日期格式,其格式为 HH:mm,例如10:00。

然后我更改时间格式,以便可以以 milis 为单位来设置重复闹钟:

SimpleDateFormat format = new SimpleDateFormat("HH:mm");
String time = collectionString;

long timeOfFirstCollectionInMillis = format.parse(time).getTime();
System.out.println(collectionInMillis);

//Set Alarm to Repeat
manager.setRepeating(AlarmManager.RTC_WAKEUP,collectionInMillis, interval, pendingIntent);

问题是它认为日期已经过去了,因为时间上没有附加日期(我认为)。我怎样才能设置它,以便如果时间已经过去,比如现在是上午 11:00,但时间应该是上午 10:00,则将其设置为 future 的日期,如果时间是上午 9:00,但时间是当前日期上午 10:00?

最佳答案

我将使用 Calendar 类来实现此目的。所以基本上:
- 将时间设置为日历,并将日期设置为今天
- 将其与当前时间戳进行比较
- 如果它在当前时间之前,则将其设置为 future 的日期(下一小时,第二天,...)
- 如果是在当前时间之后,您可以按原样使用

粗略地说:

Calendar now = Calendar.getInstance();
now.setTime(new Date());

Calendar cal = Calendar.getInstance();
cal.setTime(timeOfFirstCollectionInMillis);
cal.set(Calendar.YEAR, now.get(Calendar.YEAR));

对月份和日期执行相同的操作...然后:

if (cal.before(now)) {
   // increase
} else {
  timeOfFirstCollectionInMillis = cal.getTime();
}

关于java - 设置当前或 future 日期的闹钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26506559/

相关文章:

java - 调用函数以显示/隐藏来自另一个类的 ImageView

android - 在 Android 中单击或取消通知时的通用监听器

android - 如何对齐位于中心小部件内的按钮内的左侧文本 | flutter ?

c# - 区分日期/时间和版本

java - 对单例 "manager"对象的静态引用的缺点?

java - 如何在运行时将 PatternLayout 添加到根记录器?

java - 在 JUnit 规则运行之前使用 Spring TestExecutionListener 初始化状态

Android - 如何从外部输入设备直接捕获变量中的文本

javascript - 如何将像 2020-01-06T17 :11:58. 643Z 这样的javascript日期转换为Excel中的日期时间?

javascript new Date(2015,01,29) 返回完全错误的日期