Java日期比较无法正常工作

时间:2014-04-21 10:16:48

标签: java date

我正在使用此实际日期:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Calendar cal = Calendar.getInstance();
String today = dateFormat.format(cal.getTime());
System.out.println(today);

它打印今天的日期:2014年4月21日

然后,我想比较这个日期是否在两个日期之间:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
Date actualdate = sdf.parse(today);
Date date1 = sdf.parse("20.04.2014");  
Date date2 = sdf.parse("23.04.2014");
Calendar actual = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
actual.setTime(actualdate);
cal1.setTime(date1);
cal2.setTime(date2);

if(actual.after(date1) && actual.before(date2)) System.out.println("Yes");
else System.out.println("No");

总是打印否。问题是什么?当我将date1设置为21.04.2014并使用actual.equals(date1)时,它可以工作。但是当我在它之前或之后使用它时。感谢

5 个答案:

答案 0 :(得分:5)

将其更改为actual.after(cal1) && actual.before(cal2)

答案 1 :(得分:2)

您正在将日历与日期进行比较

您必须将日历与日历或日期与日期

进行比较
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class Cal {

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy");
        Calendar cal = Calendar.getInstance();
        String today = dateFormat.format(cal.getTime());
        System.out.println(today);

        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
        Date actualdate = sdf.parse(today);
        Date date1 = sdf.parse("20042014");  
        Date date2 = sdf.parse("23042014");
        Calendar actual = Calendar.getInstance();
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        actual.setTime(actualdate);
        cal1.setTime(date1);
        cal2.setTime(date2);

        System.out.println(actual);
        System.out.println(cal1);
        System.out.println(cal2);

        if(actualdate.after(date1) && actualdate.before(date2)){
            System.out.println("Yes");
        }
        else {
            System.out.println("No");
        }

        if(actual.after(cal1) && actual.before(cal2)){
            System.out.println("Yes");
        }
        else {
            System.out.println("No");
        }

    }

}

答案 2 :(得分:1)

我很遗憾地告诉你,两个日期之间比较的功能是无用的,不起作用。 如果你想去,这就是我测试过的功能

private static boolean validateEndDate(String startDate, String endDate)
{
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
        Date date1 = dateFormat.parse(startDate);
        Date date2 = dateFormat.parse(endDate);
        if(date1.before(date2))
        {
            return true;
        }
    }catch(Exception e)
    {
        System.out.println(e.getMessage());
    }

    return false;
}

现在看看我在说什么,给它这两个日期:

System.out.println(validateEndDate("31/07/2016","1/08/2016"));

现在要解决这个问题,我必须实现自己的功能:

private boolean compareDates(String startDate,String endDate)
    {
    int day=Integer.parseInt(startDate.split("/")[0]);
    int month=Integer.parseInt(startDate.split("/")[1]);
    int year=Integer.parseInt(startDate.split("/")[2]);

    int day2=Integer.parseInt(endDate.split("/")[0]);
    int month2=Integer.parseInt(endDate.split("/")[1]);
    int year2=Integer.parseInt(endDate.split("/")[2]);
    if(year<year2 || year==year2)
    {
        if(year<year2)
     {
        return true;
      }
        //Check the month
        if(month<month2 || month==month2)
        {
            if(month<month2)
            {
                return true;
            }
            //Check the day
            if(day<day2)
            {
                return true;
            }
        }
    }

    return false;
}

答案 3 :(得分:0)

您正在将Calender值与Date进行比较。只需使用Date值即可。或者只使用Calender值。不要把它们混合在一起。

actual.after(cal1) && actual.before(cal2)

actualdate.after(date1) && actualdate.before(date2)

答案 4 :(得分:0)

见工作:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
Date actual = sdf.parse("21.04.2014");
Date date1 = sdf.parse("20.04.2014");  
Date date2 = sdf.parse("23.04.2014");
if(actual.after(date1) && actual.before(date2)) {
    System.out.println("Yes");
} else {
    System.out.println("No");
}