Java日期时间问题

时间:2012-02-05 10:26:04

标签: java date

我的Date实例有问题。我做了以下事情:

Date startDate = new Date(); //this is from database value
Date todayDate = new Date(); //this is created locally

现在当我试图比较它们时,唯一的问题是Date实例会有时间,所以当我检查它们是否相等时,它可能不会给出我期望的相同的东西,而是更少或更多。我测试了以下内容:

    System.out.println(rsv.startDate);
    System.out.println("Today date:"+todayDate);
    if(rsv.startDate.equals(todayDate)){
        System.out.println("Equal!");
    }else if(rsv.startDate.after(todayDate)){
        System.out.println("After!!");
    }else{
        System.out.println("Before!!!!");
    }

虽然两者都是第5个feb,但它显示的是Before而不是相等的输出。我该如何解决这个问题?我知道SimpleDateFormat,但会将日期更改为字符串。

谢谢,

3 个答案:

答案 0 :(得分:2)

您可以从当前Date对象中删除时间:

   Date date = new Date();

   Calendar dCal = Calendar.getInstance();
   dCal.setTime(date);
   dCal.set(Calendar.HOUR_OF_DAY, 0);
   dCal.set(Calendar.MINUTE, 0);
   dCal.set(Calendar.SECOND, 0);
   dCal.set(Calendar.MILLISECOND, 0);

   date = dCal.getTime();

然后进行比较。

或者,如果您的项目需要更多的日期/时间处理能力,您可以使用joda日期时间库:http://joda-time.sourceforge.net

MidnightDate类适用于此特定用例:http://joda-time.sourceforge.net/api-release/org/joda/time/DateMidnight.html

答案 1 :(得分:2)

对于日期操作,您可以使用Joda实用程序。以下代码段显示比较两个日期:

DateTime one = new DateTime(original-Date-1);
DateTime two = new DateTime(original-Date-2);

LocalDate oneDate = one.toLocalDate();
LocalDate twoDate = two.toLocalDate();

return oneDate.compareTo(twoDate);

您可以看到:http://joda-time.sourceforge.net/index.html

答案 2 :(得分:0)

Date包含日期和时间。如果时间也相同,则Equals()仅返回true。要使比较起作用,您需要确保两个Date对象的时间部分相同(例如,所有对象都设置为零)。