2014-04-21 47 views
0

我正在使用这个实际日期:Java的日期比较不正常

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

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

0

您与Date比较Calender值。只需使用Date值。或者只使用Calender值。不要将它们混合使用。

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

actualdate.after(date1) && actualdate.before(date2) 
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"); 
} 
1

你是比较有日期

必须比较日历日历或日期与日期

日历
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"); 
     } 

    } 

} 
0

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

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; 
}