我正在使用此实际日期:
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)时,它可以工作。但是当我在它之前或之后使用它时。感谢
答案 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");
}