Java Android在比较日期时遇到问题

Java Android在比较日期时遇到问题,java,date,Java,Date,我的应用程序能够设置提醒,一切正常。问题在于检查提醒计划的日期是否已过。我有这个设置来比较日期。闹钟是以毫秒为单位的。即使日期已经过去,它也会说“这张便条有一个预定的提醒。”我在这里遗漏了什么 Date currentcal = new Date(); Date alarmcal = new Date(); alarmcal.setTime(alarm); if (alarm != 0) { if(alar

我的应用程序能够设置提醒,一切正常。问题在于检查提醒计划的日期是否已过。我有这个设置来比较日期。闹钟是以毫秒为单位的。即使日期已经过去,它也会说“这张便条有一个预定的提醒。”我在这里遗漏了什么

        Date currentcal = new Date();
        Date alarmcal = new Date(); 
        alarmcal.setTime(alarm);
        if (alarm != 0) {
            if(alarmcal.compareTo(currentcal)<0) {
                delete_message.setText("This note has a reminder scheduled.");   
            } else if (alarmcal.compareTo(currentcal)>0) {
                delete_message.setText("Reminder date passed.");            
            }                   
        }     
datecurrentcal=新日期();
Date alarmcal=新日期();
alarmcal.设置时间(报警);
如果(报警!=0){
如果(报警校准比较到(当前校准)0){
删除_message.setText(“已过提醒日期”);
}                   
}     

我想你的逻辑已经改变了。您的第一个if语句实际上是检查alarmcal是否小于当前日期,而您的else if实际上是检查alarmcal是否在未来。

执行此操作

       if(alarmcal.before(new Date()))
             delete_message.setText("Reminder date passed."); 
       else
             delete_message.setText("This note has a reminder scheduled.");
希望您正确设置了
alarmcal.setTime


好的,上面的代码是有效的。你可能把时间设置错了。看这里

   Date alarmcal = new Date();
   //alarmcal.setTime(System.currentTimeMillis() - 5000); //print date passed
alarmcal.setTime(System.currentTimeMillis() + 5000); //prints reminder scheduled
   if(alarmcal.before(new Date()))
         System.out.println("Reminder date passed."); 
   else
       System.out.println("This note has a reminder scheduled.");

问题是您将alarmcal设置为日期,而不是相应的长值。因为两个“时钟”都是活动的,所以您的逻辑将失败。以下代码段将比当前时间提前10秒设置时间alarmcal。比较总是与一个“活时钟”相比较

此文件的打印输出将为:

293484130625 1293484124628
此便笺已安排提醒。
1293484130625 1293484126628
此便笺已安排提醒。
1293484130625 1293484128628
此便笺已安排提醒。
1293484130625 1293484130629
提醒日期已过。
1293484130625 1293484132629
提醒日期已过。
1293484130625 1293484134629
提醒日期已过


希望你能将此应用到你的android代码中

你设定的时间是多少?你的意思是什么?我会在一分钟后设置一个提醒,例如,提醒将关闭,但计划提醒的文本仍将保留。警报是以毫秒为单位的时间。顺便说一句,这样做总是说提醒日期过去了=\尝试此设置
alarm=System.currentTimeInMillis()+5000
,这样您将测试逻辑是否工作。然后再次使用
alarm=System.currentTimeInMillis()-5000进行测试,看看是否得到相反的结果我想我找到了问题所在。我正在将报警保存为整数类型。是否有任何方法可以在不影响数据库列类型的情况下修复此问题?
long alarmcal = new Date().getTime() + 10 * 1000; // add 10 seconds from current time
    while (true) {
        try {
            Thread.sleep(2000);
            System.out.println(alarmcal + " " + new Date().getTime());              
            if (alarmcal >= new Date().getTime()) {
                System.out.println("This note has a reminder scheduled.");
            } else {
                System.out.println("Reminder date passed.");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }